本文共 1312 字,大约阅读时间需要 4 分钟。
之前有写过内部排序,这次看到严蔚敏老师的书上还介绍了外部排序,就一起记录一下,以便以后可以看看:
void Adjust(int s){ int t=(s+k)/2; int temp; while(t>0) { if(External[s] > External[LoserTree[t]]) { temp = s; s = LoserTree[t]; LoserTree[t]=temp; } t=t/2; } LoserTree[0]=s;}void CreateLoserTree(){ External[k]=MINKEY; int i; for(i=0;i=0;i--)Adjust(i);}void K_Merge(){ int i,p; for(i=0;i =A[p].num)External[p]=MAXKEY; else { External[p]=A[p].arr[A[p].pos]; A[p].pos++; } Adjust(p); } cout<
假设初始待排序文件为FI,初始归并段文件为输出文件FO,内存工作区为WA,FO与WA的初始状态为空,并假设内存工作去WA的容量可容纳w个记录,则置换-选择排序的操作的过程为:
当然由于置换选择排序出来的结果可能使得每个段不一样,这样用K路平衡归并树似乎不是很好,所以选择可以选择用哈夫曼树,这样构造的树称为最佳归并树。
转载地址:http://fgnfi.baihongyu.com/