#include <iostream>
using namespace std;
//用归并算法合并两个数组
//时间复杂度是O(n),空间复杂度为O(n)
//该算法的关键点是:把两个数组看成是独立的,分开索引,也就是index_1,index_2两个变量的变化(对个人而言)
int main()
{
int arr1[4] = { 3, 5, 8, 11 };
int arr2[7] = { 2, 6, 8, 9, 11, 15, 20 };
int length = 0; //合并后需要数组的长度
int index_1 = 0, index_2 = 0; //两个数组的索引值
int i = 0; //内存空间的叠加计数变量
length = sizeof(arr1) / sizeof(int)+sizeof(arr2) / sizeof(int); //求出长度
//cout << length;
int *p = new int[length]; //定义一个指向数据的指针
while ((index_1 < sizeof(arr1) / sizeof(int)) && (index_2 < sizeof(arr2) / sizeof(int))) //归并算法核心
{
if (arr1[index_1] <= arr2[index_2])
{
*(p + i) = arr1[index_1];
index_1++;
}
else
{
*(p + i) = arr2[index_2];
index_2++;
}
i = i + 1;
}
while ((index_2 < sizeof(arr2) / sizeof(int)))
{
*(p + i) = arr2[index_2];
index_2++;
i = i + 1;
}
while ((index_1 < sizeof(arr1) / sizeof(int)))
{
*(p + i) = arr1[index_1];
index_1++;
i = i + 1;
}
for (int j = 0; j < i; j++) //打印
{
cout << *(p + j) << ' ';
}
cout << endl;
delete [] p; //释放内存
return 0;
}
![]()