顺序归并法将多个数组归并成一个有序数组
时间: 2023-11-24 08:08:13 浏览: 67
c代码-两有序数组合并排序--非冒泡
顺序归并法是一种将多个有序数组归并成一个有序数组的常见方法。具体步骤如下:
1. 将多个有序数组存储在一个二维数组中。
2. 从第一个数组中取出第一个元素,与其它数组中的第一个元素进行比较,找到最小值。
3. 将最小值存入新的有序数组中,并将其所在的数组的指针向后移动一位。
4. 重复步骤2和3,直到所有元素都被归并到新的有序数组中。
下面是一个C++实现示例:
```c++
#include <iostream>
using namespace std;
const int MAX = 100;
void mergeArrays(int arr[][MAX], int n, int m, int output[])
{
int ptr[n];
for (int i=0; i<n; i++)
ptr[i] = 0;
int min_val = INT_MAX, min_ind = -1;
while (true) {
for (int i=0; i<n; i++) {
if (ptr[i] < m && arr[i][ptr[i]] < min_val) {
min_val = arr[i][ptr[i]];
min_ind = i;
}
}
if (min_ind == -1)
break;
output[++output[0]] = min_val;
ptr[min_ind]++;
min_val = INT_MAX;
min_ind = -1;
}
}
int main()
{
int arr[][MAX] = {{2, 4, 9},
{3, 5, 6},
{0, 7, 8}};
int output[MAX];
output[0] = 0;
mergeArrays(arr, 3, 3, output);
for (int i=1; i<=9; i++)
cout << output[i] << " ";
return 0;
}
```
在此示例中,我们将三个有序数组存储在一个二维数组中,然后将它们归并到一个新的有序数组中。输出结果为:0 2 3 4 5 6 7 8 9。
阅读全文