20140528 歸併排序 內排序 外排序

2022-04-30 23:42:16 字數 695 閱讀 6450

1、歸併排序

2、內排序和外排序

外排序的乙個例子是外歸併排序(external merge sort),它讀入一些能放在記憶體內的資料量,在記憶體中排序後輸出為乙個順串(即是內部資料有序的臨時檔案),處理完所有的資料後再進行歸併。比如,要對 900 mb 的資料進行排序,但機器上只有 100 mb 的可用記憶體時,外歸併排序按如下方法操作:

讀入 100 mb 的資料至記憶體中,用某種常規方式(如快速排序、堆排序、歸併排序等方法)在記憶體中完成排序。

將排序完成的資料寫入磁碟。

重複步驟 1 和 2 直到所有的資料都存入了不同的 100 mb 的塊(臨時檔案)中。在這個例子中,有 900 mb 資料,單個臨時檔案大小為 100 mb,所以會產生 9 個臨時檔案。

讀入每個臨時檔案(順串)的前 10 mb ( = 100 mb / (9 塊 + 1))的資料放入記憶體中的輸入緩衝區,最後的 10 mb 作為輸出緩衝區。(實踐中,將輸入緩衝適當調小,而適當增大輸出緩衝區能獲得更好的效果。)

執行九路歸併演算法,將結果輸出到輸出緩衝區。一旦輸出緩衝區滿,將緩衝區中的資料寫出至目標檔案,清空緩衝區。一旦9個輸入緩衝區中的乙個變空,就從這個緩衝區關聯的檔案,讀入下乙個10m資料,除非這個檔案已讀完。這是「外歸併排序」能在主存外完成排序的關鍵步驟 -- 因為「歸併演算法」(merge algorithm)對每乙個大塊只是順序地做一輪訪問(進行歸併),每個大塊不用完全載入主存。

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。2 路歸併演算法 1.演算法基本思路 設兩個有序的子檔...

排序 歸併排序

利用遞迴的思想,當n 1時,只有乙個元素需要排序,為遞迴臨界條件 否則,遞迴的將前半部分資料和後半部分資料各自歸併排序,得到排序後的兩部分資料,然後再將得到的兩部分合併到一起。mergesort algorithm public void mergesort int data mergesort例程...