优化归并排序:置换-选择法在外部排序中的应用

需积分: 10 3 下载量 2 浏览量 更新于2024-07-13 收藏 150KB PPT 举报
本篇文章主要讨论了置换-选择排序在外部排序中的应用和效果,特别是其在处理大量存储在外存储器上的数据记录文件时的表现。外部排序是指针对无法一次性装入内存的大文件进行排序的算法,通常涉及内存和外存的协同工作。 置换-选择排序在此场景下,由于初始归并段的长度可能不等,其效果会受到输入文件记录关键字分布的影响。当关键字随机分布时,初始归并段的平均长度大约是内存工作区大小(w)的两倍。这意味着排序过程中的数据交换频繁,对内存管理和I/O操作要求较高。 外部排序的基本方法之一是归并排序,其核心步骤包括:首先将大文件分割成多个小的内存能够处理的子文件(初始归并段),然后分别对这些子文件进行内排序,再通过多路合并逐步合并这些有序段,直到整个文件在磁盘上有序。例如,一个包含10000个记录的文件,如果每块物理存储能容纳200个记录,内存缓冲区可容纳5个块,那么经过10次内排序后会产生10个初始归并段,随后通过两路归并只需四趟即可完成排序。 外排序的时间复杂性主要由内排序和I/O操作决定。尽管归并操作本身需要进行大量的磁盘读写(如100趟I/O操作),但通过扩大初始归并段长度或采用多路(如k路)归并,可以减少初始归并段的数量和合并趟数,从而降低总的I/O次数。比如,通过k路归并,比较次数c可以通过减少到log2k,这有助于优化归并效率。 然而,单纯通过简单比较进行k路归并会存在一个问题:随着k值增加,比较次数c减小,但总的比较次数仍然受初始归并段数量m的影响。解决这一矛盾的方法是引入“败者树”,通过这种方法,每次选择k个记录中的最小者,使得c变为log2k,进一步减少了比较次数,从而提高了归并排序的效率。 本文详细探讨了置换-选择排序在外部排序中的作用、归并排序的过程以及如何通过优化归并策略来提升整体的排序性能,特别强调了在外存和内存之间有效管理和调度数据的重要性。