問題:1MB是嚴格的邊界。
原數據文件稱爲A,輸出文件稱爲B,中間文件稱爲T。
假定讀文件A花費1單位時間,寫同樣多的數據花費2單位時間,在此假設下進行效率分析,並且只考慮讀寫文件的時間,不考慮內存內操作的時間。
方法一:
分兩次讀入A,仍用位圖方式排序。第一次對 1~8M範圍內的數據排序,第二次對8M+1~10M範圍內的數據排序。第一次排序所得寫到B,第二次排序所得添加到B的後面即可。
效率:讀兩次A,寫一次B,總花費4單位時間。不用中間文件。
方法二:
讀入文件A,對1~8M範圍內的數據排序,並對8M+1~10M範圍內的數據寫到T,1~8M範圍內的排序結果寫到B;然後讀入文件T,對其中的數據排序,添加到B。
效率:讀一次A,讀寫一次T,寫一次B,效率依賴於數據分佈,用到中間文件。
數據分佈均勻的情況下,size(T)=1/5 size(A),總花費3.6單位時間。
最壞情況下,所有數據都在8M+1~10M範圍內,總花費6單位時間。
方法三:(方法二的優化)
先申請與A大小的文件作爲B,將8M+1~10M範圍內的數據寫到B的末端,這樣不用中間文件。