當排序內容太大,不足以全部放入記憶體進行內部排序,則可把排序內容按可用記憶體大小分割成多個檔案,分別讀取檔案進行內排,排序結果繼續寫入檔案。最後對所有檔案進行歸併排序合併成有序大檔案。
外部排序步驟: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 故...