歸併排序
歸併排序是採用分治的思想,將陣列劃分為兩個子陣列,然後遞迴的將每個子陣列再進行劃分,直到陣列中只剩一下乙個元素,然後開始排序合併,直到將所有的子陣列合併完成,整個資料就是有序的了。
歸併排序乙個重要的操作函式就是合併函式
時間複雜度:將陣列分成的子陣列 用二叉樹表示,假設共有n層,第k層共有2的k次方個子陣列,每個子陣列的長度是2的n-k次方 所以每一層的比較次數是2的n次方,n層就是n*2的n次方次比較,n=logn 所以 時間複雜度就是nlgn
空間複雜度 n 因為有乙個臨時陣列
外部排序
假設檔案需要分成k塊讀入,需要從小到大進行排序。
(1)依次讀入每個檔案塊,在記憶體中對當前檔案塊進行排序(應用恰當的內排序演算法)。此時,每塊檔案相當於乙個由小到大排列的有序佇列。
(2)在記憶體中建立乙個最小值堆,讀入每塊檔案的佇列頭。
(3)彈出堆頂元素,如果元素來自第i塊,則從第i塊檔案中補充乙個元素到最小值堆。彈出的元素暫存至臨時陣列。
(4)當臨時陣列存滿時,將陣列寫至磁碟,並清空陣列內容。
(5)重複過程(3)、(4),直至所有檔案塊讀取完畢。
歸併排序 外部排序
基本思想 先對資料進行均分 左右兩半部分 均分到左右部分已經有序 歸併 歸併排序核心步驟 分組 歸併 外部排序 void mergesortnor int array,int size void print int array,int size endif mergesort h mergesort...
關於多路歸併排序 外部排序
比如檔案內有1億資料排序。程式設計珠璣第乙個case是有關乙個技巧性解決外部排序問題的。問題很巧妙的解決了,但一開始提到的利用歸併排序進行外部排序的演算法仍值得仔細 一下,畢竟本科時學的不是很深入。先來看內部排序中最簡單的2路歸併排序演算法。演算法核心操作是將一維陣列中前後相鄰的兩個有序序列歸併為乙...
排序 歸併排序
歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...