内存工作区可容纳的记录数。方法实现的步骤
(1)建立初始堆.
①从输入文件中输入p个记录,建立大小为p的堆。
②为第一个初始归并段选择一个适当的磁盘文件作为输出文件。
(2)置换-选择。
内存工作区存在两个堆:当前堆和新堆,新堆紧接在当前堆后存放,总大小为p。
①输出当前堆的堆顶记录到选定的输出文件。
②从输入文件中输入下一个记录。若该记录排序码的值不小于刚输出记录排序码的值,则由它取代堆顶记录,并调整当前堆。若该记录排序码的值小于刚输出记录的排序码的值,则由当前堆的堆底记录取代堆顶记录,当前堆的大小减1。新输入的记录存放在当前堆的原堆底记录的位置上,成为新堆的一个记录。
③如果新堆的记录个数大于「p/2,应着手调整新堆;如果新堆中已有p个记录,表示当前堆已输出完毕,当前的初始归并段结束、应开始创建下一个初始归并段,因此必须另为新堆选择一个磁盘文件作为输出文件。
④重复步骤②~③,直到输入文件输入完毕。
(3)输出剩余记录。
①输出当前堆中的剩余记录,并对输出边调整。
②将内存工作区中的新堆作为最后一个初始归并段输出。
设p=5,排序码序列为(54,15,62,10,77,24,29,20,59,43,69,31,47,38,12,18,51,27),执行置换选择排序的结果如图10-19(a)~图10-19(g)所示.
生成的3个初始归并段为(10,15,24,29,54,59,62,69,77),(20、31,38,43,47,51),(12,18,27)。编写一个算法,实现上述利用堆的置换-选择排序.