考研408总结【数据结构】---排序(下)

696 阅读2分钟

这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战

考研倒计时:27天

外部排序

通常采用归并排序法。

  • 为减少平衡归并中读写次数的方法:增大归并路数和减少归并段个数
  • 采用败者树增大归并路数
  • 采用置换-选择排序增大归并段长度来减少归并段个数
  • 由长度不等的归并段,进行多路平衡归并,需要构造最佳归并树

树的高度-1 = 归并趟数

败者树

图片来源麓枫

总的比较次数为(n-1)*【log2(r)向上取整】

根结点指向的数为最小数。

image.png

置换-选择排序

  1. 从待排文件 FI 输入 w 个记录到工作区 WA。
  2. 从内存工作区 WA 中选出其中关键字取最小值的记录,记为 MIN1MAX。(以后再选出关键字比它大的记录归入本归并段,比它小的归入下一归并段)
  3. 将 MINIMAX 记录输出到 FO 中去。
  4. 若 FI 未读完,则从 FI 输入下一个记录到 WA 中。
  5. 从 WA 中所有关键字比 MINIMAX 记录的关键字大的记录中选出最小的关键字记录,作为新的MINIMAX。
  6. 重复 3、4、5,直到在 WA 中选不出新的 MINIMAX 记录为止,由此得到一个初始归并排段,输出一个归并段的结束标志到 FO 中去。
  7. 重复 2~6,直到 WA 为空。由此得到全部初始归并段。

image.png

最佳归并树

image.png

会计算添加虚段的个数

  • 在一般情况下,对于 k–路平衡归并来说,若 (m-1)MOD(k-1)=0,则不需要增加虚段;否则需附加 k- (m-1)MOD(k-1) -1 个虚段。

【2019年408】 image.png

点击查看答案B

部分内容待补充完善~

如有误,请多指正!