演算法 外部排序

2022-07-29 22:45:19 字數 1375 閱讀 7287

當排序內容太大,不足以全部放入記憶體進行內部排序,則可把排序內容按可用記憶體大小分割成多個檔案,分別讀取檔案進行內排,排序結果繼續寫入檔案。最後對所有檔案進行歸併排序合併成有序大檔案。

外部排序步驟:1、分割資料 2、分別內排 3、歸併小檔案

//

//#include "

stdafx.h

"#pragma warning(disable: 4786)#include

#include

#include

#include

//加入這個標頭檔案才可以操作檔案

#include #include

#include

"afx.h

"using

namespace

std;

//分割檔案,每個檔案n個資料

int divi_file(char* file_name,int

n) out_file

count++;

if(count>=n)

}out_file.close();

in_file.close();

return

n_file;}//

子檔案內排序

void in_sort(int

n_file)

sort(v_sort.begin(),v_sort.end());

in_file.close();

out_file.open(f_name);

int len=v_sort.size();

for(int j=1;jj)

v_sort.clear();

out_file.close();

}}//

歸併兩個檔案

void merge_two(char* ifile1,char* ifile2,char*ofile)

}if(!f2.eof() && done2==1

) }

if(done1==0 && done2==0

)else

}else

if(done2==0

) }

}f1.close();

f2.close();

result.close();}//

歸併所有子檔案

void merge_all(int

n_file)

merge_all(n_file/2+n_file%2);}

//刪除臨時檔案

void del_tmp_file(int

n_file)

}void outer_sort(char* file_path,int

n)

外部排序演算法

外部排序指的是大檔案的排序,即待排序的記錄儲存在外儲存器上,在排序過程中需進行多次的內 外存之間的交換。一般情況下 其中tio取決於所用的外存裝置,顯然tio較tmg要大得多。因此,提高外排的效率應主要著眼於減少外存資訊讀寫的次數d。需要歸併的次數越少,讀寫的次數d越小。因此我們使用k 路平衡歸併的...

演算法 外觀數列

題目描述 外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1 1121 1211 111221 1 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一 即 1211。給定乙...

外部排序演算法整理

今天看了些排序相關的綜述,裡面介紹了一種外排演算法 置換選擇排序演算法,讀了之後雲裡霧裡的。於是乎谷狗了一下,學習了學習維基百科上關於外排的介紹,感覺還不錯,確實解決了心中的疑問。其中,外歸併排序和置換選擇排序都講得很清楚,還提供了一些不錯的鏈結,如jim gray的sort benchmark 故...