标签:pre 初始化 参与 div image src 过多 for 堆排
外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。
外排序步骤
#include<iostream> #include<iomanip> #include<assert.h> 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路归并的外排序模拟。对于每块数据的排序过程已经省略掉了,故每块数据初始时都是有序的,我们关注的是归并的过程。在每块数据的最后加一个最大值,作为块结束的标记。
实验结果截图如下:
标签:pre 初始化 参与 div image src 过多 for 堆排
原文地址:https://www.cnblogs.com/wuyepeng/p/9750079.html