怎樣 對40億個8位正整數進行排序

這裏可以借鑑快速排序的思想,將整個數據量進行分解,取8位正整數的中間值128,凡是大於這個數的值都放入文件b,小於128的都放入文件a。

然後再按照這種方法一直分解直到任意一邊的數量小於1千萬爲止,然後使用快速排序對這1千萬進行排序,最後將結果存入文件中,然後便不再對該數據集進行處理。

由於內存牽涉到運算的效率和性能,所以,每分解一次,都要將分解的結果放入文件中。


最後就是對這些所有的文件中的結果進行合併,這裏可以考慮用一個鏈表存放所有文件結果集的次序(也是所有排序結果的次序)

所以,總結一下:

1. 使用文件代替以前的數組,對數據按照快速排序的思想進行分解

2. 當某一結果集分解到足夠小,比如小於1千萬時,此時對該數據運用快速排序,然後將排序結果放入文件中,並且不在對該數據集進行處理

3. 合併所有結果,按照遞歸的思想,可以使用一個鏈表記錄那些文件存放了結果集,並且是有序的存放的。
你可以定義一個struct結構體,


其他解決方案:

你也可以採用分佈式的方法進行運算,但是仍然得對所有數據採用快排的思想的分解。

將原任務不僅要分解成較小的規模,還應該考慮到所有的結果方便組裝成爲最總的結果 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章