数据结构:外排序-多路归并
2014-08-23 17:56
239 查看
外排序
外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。
外排序步骤
把原数据分成几段读入内存,以至于每一块都可以完整的在内存中进行排序,排序好后,写入外部存储设备。
归并已排序好的数据块。
这就是归并排序在外排序中的应用。
对每块数据进行排序,可以使用各种内排序方法:快速排序、归并排序、堆排序等。这个比较简单,下面模拟一个对排序好的数据块进行归并的过程。
运行
这是一个常见的5路归并的外排序模拟。对于每块数据的排序过程已经省略掉了,故每块数据初始时都是有序的,我们关注的是归并的过程。在每块数据的最后加一个最大值,作为块结束的标记。
完整代码下载:外排序
专栏目录
数据结构与算法
C指针
外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。
外排序步骤
把原数据分成几段读入内存,以至于每一块都可以完整的在内存中进行排序,排序好后,写入外部存储设备。
归并已排序好的数据块。
这就是归并排序在外排序中的应用。
对每块数据进行排序,可以使用各种内排序方法:快速排序、归并排序、堆排序等。这个比较简单,下面模拟一个对排序好的数据块进行归并的过程。
#include<iostream> #include<iomanip> using namespace std; const int MAX = 100; int key[5][5] = { { 3, 5, 7, MAX }, { 1, 6, 9, MAX }, { 2, 4, 8, MAX }, { 0, 12, 14, MAX }, { 10, 11, 13, 15, MAX } }; void sort() { //使用pos记录每行正在参与排序的元素下标 int pos[5]; //初始化 memset(pos, 0, 5*sizeof(int)); int i, min, data; while (true) { //找出第一个排序未完成的队列 i = 0; while (i < 5 && key[i][pos[i]] == MAX) i++; if (i == 5) //排序完成 break; min = i; data = key[min][pos[min]]; i++; //找出当前参与排序的所有数中最小的 while (i < 5) { if (key[i][pos[i]] < data) { min = i; data = key[min][pos[min]]; } i++; } //打印当前最小者 cout << setw(4) << key[min][pos[min]]; pos[min]++; } cout << endl; } int main() { cout << "------多路归并的模拟---by David---" << endl; cout << "原序列是" << endl; int i, j; for (i = 0; i < 5; i++) { for (j = 0; j < 5 && key[i][j] != MAX; j++) cout << setw(4) << key[i][j]; cout << endl; } cout << "经过5路归并排序" << endl; sort(); system("pause"); return 0; }
运行
这是一个常见的5路归并的外排序模拟。对于每块数据的排序过程已经省略掉了,故每块数据初始时都是有序的,我们关注的是归并的过程。在每块数据的最后加一个最大值,作为块结束的标记。
完整代码下载:外排序
专栏目录
数据结构与算法
C指针
相关文章推荐
- 外部排序技术之多路归并
- 外部排序:多路归并树
- 数据结构(C#)--冒泡、插入、快速、堆、归并、希尔、选择各种排序排序过程比较以及各种排序的所用时间的对比
- 数据结构 学习笔记(十):排序(上):简单排序(冒泡,插入),希尔 / 选择 / 堆 / 归并 排序
- 多路归并 外排序 大文件排序 海量数据处理
- 数据结构-数组排序(冒泡 选择 插入 归并(合并有序数组))-C语言
- 败者树 多路平衡归并外部排序 - Dreaming.O的专栏 - 博客频道 - CSDN.NET
- C++数据结构 排序 二分 插入 冒泡 基数 归并 直选 快排 希尔 堆排序
- 多路归并排序之败者树
- C语言数据结构 链表与归并排序实例详解
- 数据结构的排序:插入类、交换类、选择类、归并类
- 数据结构-数组排序-二路归并-循环实现-C语言
- 【排序算法】外部排序二 —— 外部排序技术之多路归并
- 数据结构 归并排序
- 数据结构 归并排序的实现
- 数据结构排序3--归并排序
- 数据结构各种排序法及核心思想(冒泡、鸡尾酒、选择、插入、二分法、希尔、堆、归并、快速)
- 数据结构 26 排序 归并 快排使用精简栈深度优化
- 数据结构-排序总结(冒泡 插入 选择 归并)
- 数据结构--归并排序的应用(求逆序数 蓝桥杯--小朋友排队)