外部排序多是:大檔案的排序
主要排序方法:多路歸併排序(分部分放進記憶體進行排序)
一般步驟:預處理(化成多個初始子檔案順序、堆選擇)+合併排序
外部排序的例子**自
假設有乙個72kb的檔案,其中儲存了18k個整數,磁碟中物理塊的大小為4kb,將檔案分成18組,每組剛好4kb。
首先通過18次內部排序,把18組資料排好序,得到初始的18個歸併段r1~r18,每個歸併段有1024個整數。
然後對這18個歸併段使用4路平衡歸併排序:
第1次歸併:產生5個歸併段
r11 r12 r13 r14 r15 其中
r11是由中的資料合併而來
r12是由中的資料合併而來
r13是由中的資料合併而來
r14是由中的資料合併而來
r15是由中的資料合併而來
把這5個歸併段的資料寫入5個檔案:
foo_1.dat foo_2.dat foo_3.dat foo_4.dat foo_5.dat
第2次歸併:從第1次歸併產生的5個檔案中讀取資料,合併,產生2個歸併段
r21 r22
其中r21是由中的資料合併而來
其中r22是由中的資料合併而來
把這2個歸併段寫入2個檔案
bar_1.dat bar_2.dat
第3次歸併:從第2次歸併產生的2個檔案中讀取資料,合併,產生1個歸併段
r31
r31是由中的資料合併而來
把這個檔案寫入1個檔案
foo_1.dat
此即為最終排序好的檔案。
敗者樹
敗者樹節點儲存的是失敗者的資訊(它可方便下面的比較),而且各個層次的失敗者儲存和層次關聯的資訊。由此,敗者樹是在結構上利於下一次重構。
敗者樹可以加速外部排序:
k路平衡歸併中,若不使用敗者樹,則對每次對k路需要比較k-1次得到最值,對於總共n個記錄的每一趟歸併共需要(n-1)*(k-1)次比較。若有m個歸併初始段,歸併趟數為logk(m) ,總共比較次數logk(m)*(n-1)*(k-1)。引入敗者樹(由k個元素構造成敗者樹)則每次不需要k-1次比較,只需要log2(k)次即可。
勝者樹
勝者樹父節點儲存的是勝利者的資訊。
排序之外部排序
有時,待排序的檔案很大,計算機記憶體不能容納整個檔案,這時候對檔案就不能使用內部排序了 這裡做一下說明,其實所有的排序都是在記憶體中做的,這裡說的內部排序是指待排序的內容在記憶體中就可以完成,而外部排序是指待排序的內容不能在記憶體中一下子完成,它需要做內外存的內容交換 外部排序常採用的排序方法也是歸...
排序之外部排序
有時,待排序的檔案很大,計算機記憶體不能容納整個檔案,這時候對檔案就不能使用內部排序了 這裡做一下說明,其實所有的排序都是在記憶體中做的,這裡說的內部排序是指待排序的內容在記憶體中就可以完成,而外部排序是指待排序的內容不能在記憶體中一下子完成,它需要做內外存的內容交換 外部排序常採用的排序方法也是歸...
排序(二 外部排序
一 定義 外部排序指的是大檔案的排序,即待排序的記錄儲存在外儲存器上,待排序的檔案無法一次裝入記憶體,需要在記憶體和外部儲存器之間進行多次資料交換,以達到排序整個檔案的目的。二 處理過程 1 按可用記憶體的大小,把外存上含有n個記錄的檔案分成若干個長度為l的子檔案,把這些子檔案依次讀入記憶體,並利用...