演算法說明
多路歸併排序也叫k路歸併排序,實際上是歸併排序的擴充套件版,同樣也是歸併排序的一種,通常的應用場景的針對大資料量的排序。
實現過程:
1、從字面可以看出,多路歸併就是將待排的大資料量分成k路,然後將k路的每個子資料集進行排序;然後將排序的結果儲存至磁碟中,這也就是所謂的外排序。
2、子資料集中的排序我們可以同樣使用歸併,也可以使用快排,這個看實際情況了。
3、當k路的子資料集排序成功後,我們首先將k路每個子資料集的第乙個元素拿出,建立乙個小頂堆。 頂點就是最小值。
4、這個小頂堆是一種勝者堆(參考錦標賽排序),第乙個值是最小值,拿走後我們可以根據錦標賽排序的邏輯,找到該值所在的子資料集,將下乙個元素put至之前建立的小頂堆中,然後再進行比較,這樣就會產生每二小的值。
5、如此反覆,最終就會有排序結果
時間複雜度o(nlog2n)
ps:如果大資料量的待排陣列的元素值不大,那麼可以考慮鴿巢排序啦,如果不考慮穩定性的話,哈哈哈哈哈哈
**
時間原因先空著,以後補上
參考
Hark的資料結構與演算法練習之煎餅排序
演算法說明 假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。這個演算法有兩種解,一種是普通解,一種是最優解。普通論證 例如你的初始煎餅順序是 2,4,3,1 然後...
Hark的資料結構與演算法練習之煎餅排序
演算法說明 假設煎鍋裡邊有n個煎餅摞在了一起,它們大小不一並且順序不一致,我們需要通過拿鏟子將它們不停的翻個,進行排序,最終得到乙個底下是大的煎餅,上邊是小的煎餅的序列。這個排序的過程就是煎餅排序。這個演算法有兩種解,一種是普通解,一種是最優解。普通論證 例如你的初始煎餅順序是 2,4,3,1 然後...
Hark的資料結構與演算法練習之耐心排序
演算法說明 耐心排序是插入排序的一種,至少wikipedia是這麼分的。話說我明白這個演算法的實現思路了,但是不明白這麼做的意義何在?如果明白的朋友幫忙留個言說一下,以後如果我明白的話,我會來修改這個博文記錄清楚的。其實這個演算法很簡單,先是自動分桶 哈哈,有別於桶排序,耐心排序的分桶是根據實際待排...