/** 合并有序数组:
* 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B
* 编写一个方法,将B并入A,并排序
*/
思路两种:一步到位 或者 先合并再排序
一步到位:归并的思路,同时倒序遍历a,b两个数组,比较大小,大的值就放到扩建后的数组a中
代码:
#include <bits/stdc++.h>
using namespace std;
/** 合并有序数组:
* 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B
* 编写一个方法,将B并入A,并排序
* 采用归并思想
*/
void f(int a[], int b[], int alen, int blen) {
int sp1 = alen - 1; //指针指向数组a的最后一位
int sp2 = blen - 1; //指针指向数组a的最后一位
int sp3 = alen + blen - 1; //指针指向两个数组合并后的最后一位
while(sp3 >= 0) {
if(a[sp1] > b[sp2]) //从后往前分配数值
a[sp3--] = a[sp1--];
else if(a[sp1] <= b[sp2])
a[sp3--] = b[sp2--];
}
for(int i = 0; i < alen + blen; i++)
cout << a[i] << " ";
}
int main() {
int a[20] =