这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战
考研倒计时:27天
外部排序
通常采用归并排序法。
- 为减少平衡归并中读写次数的方法:增大归并路数和减少归并段个数
- 采用败者树增大归并路数
- 采用置换-选择排序增大归并段长度来减少归并段个数
- 由长度不等的归并段,进行多路平衡归并,需要构造最佳归并树。
树的高度-1 = 归并趟数
败者树
图片来源麓枫
总的比较次数为(n-1)*【log2(r)向上取整】
根结点指向的数为最小数。
置换-选择排序
- 从待排文件 FI 输入 w 个记录到工作区 WA。
- 从内存工作区 WA 中选出其中关键字取最小值的记录,记为 MIN1MAX。(以后再选出关键字比它大的记录归入本归并段,比它小的归入下一归并段)
- 将 MINIMAX 记录输出到 FO 中去。
- 若 FI 未读完,则从 FI 输入下一个记录到 WA 中。
- 从 WA 中所有关键字比 MINIMAX 记录的关键字大的记录中选出最小的关键字记录,作为新的MINIMAX。
- 重复 3、4、5,直到在 WA 中选不出新的 MINIMAX 记录为止,由此得到一个初始归并排段,输出一个归并段的结束标志到 FO 中去。
- 重复 2~6,直到 WA 为空。由此得到全部初始归并段。
最佳归并树
会计算添加虚段的个数
- 在一般情况下,对于 k–路平衡归并来说,若 (m-1)MOD(k-1)=0,则不需要增加虚段;否则需附加 k- (m-1)MOD(k-1) -1 个虚段。
【2019年408】
点击查看答案
B部分内容待补充完善~
如有误,请多指正!