本博客基于对mooc中的《北京大学-数据结构与算法》及《西北大学-数据结构》的理解进行编写
置换排序
基于《西北大学-数据结构》置换排序的理解
在这里,我们先假设:1.输入文件FI为:21,11,09,02,16,31,20,01,27,05,13,28 。2.工作区WA 容量m = 3 。3.输出文件为FO
- 首先,我们从 FI 中读取三个数据进入 WA 。分别是 21,11,09
- 选取 WA 中最小的值输出,再从 FI 中读入数据。输出 09 ,读入 02.
- 从 WA 中比前一个输出大的最小的值输出,再从 FI中读入数据。这时 WA 中为 21,11,02 输出 11,读入 16.
- 重复以上的第三个步骤,直到 WA 中数据不满足第三的步骤时,再将以上步骤重新进行一次,直到外数据均排序生成初始合并段。以上数据生成两个初始合并段:
09,11,16,21,31
01,02,05,13,20,27,28
基于《北京大学-数据结构与算法》置换排序的理解
在这里,采用的方法和上面西北大学的相似,但更加具体,用到了数据结构中的堆
- 首先向输入文件中读取一定量的数据,生成最小堆
- 再向输入文件中读取一个数据,与堆顶数据比较
- (1)当输入的数据大于堆顶的数据时,将堆顶的元素输出,输入的数据占领堆顶位置,对最小堆进行调整
- (2)当输入的数据小于堆顶的数据时,将堆顶的元素输出,输入的数据和堆最低的数据互换,从堆中移除,堆的规模缩小1.
- 重复以上步骤,直至堆的规模为0,再重新开始
二路归并法
- 输入缓冲区:两个页块 输出缓冲区:一个页块
- 过程:输出缓冲区的数据进行归并后送入输入缓冲区
- 输出缓冲区满: