外部排序學習

2021-06-06 09:20:51 字數 1216 閱讀 2779

外部排序多是:大檔案的排序

主要排序方法:多路歸併排序(分部分放進記憶體進行排序)

一般步驟:預處理(化成多個初始子檔案順序、堆選擇)+合併排序

外部排序的例子**自

假設有乙個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的子檔案,把這些子檔案依次讀入記憶體,並利用...