用归并算法合并两个有序数组
#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; }