有两个升序的的数组A1和A2,内存在A1末尾有足够的多余空间容纳A2,设计一个函数,把A2中的所有数字插入到A1中并且所有的数字都是升序的。...

  此问题和替换空格问题几乎都可以用一个模式高效求解,即都采用从后往前的方法比较A1和A2的数字,然后把较大的数复制到A1合适的位置。防止采用从前往后的方法导致大量的重复移动。

具体思路:类似于merge_sort中的merge过程,首先可以得到合并后A1数组的实际长度(A1.length+A2.length)

     依次比较两个数组中的最后一个元素,把较大的数依次放入A数组的末尾,直到A1中元素比较完成或者A2中的数组比较完成。

     然后只需要把多出的元素直接插入A1前段即可。

具体的代码如下:

 1 #include<iostream>
 2 using namespace std;
 3 const int MaxArray = 100;
 4 /*
 5     alen:数组A的实际元素长度
 6     blen:数组B的实际元素长度
 7     假设A末尾有充分的空间容纳B
 8 */
 9 void Combine_Array(int A[MaxArray+1],int B[],int alen,int blen)
10 {
11     int i = alen - 1;//j指向A的最后一个元素
12     int j = blen - 1;//i指向B的最后一个元素
13     for (int k = alen + blen - 1; k >= 0; k--)//从后往前插入
14     {
15         if (A[i] > B[j]){//选择较大的依次放在尾部
16             A[k] = A[i];
17             --i;
18         }
19         else{
20             A[k] = B[j];
21             j--;
22         }
23         while (i < 0&&j>=0){//如果B剩余,则把B中的剩余元素依次移动到A的前端;若A剩余则证明已经排好
24             A[k] = B[j];
25             --j;
26         } 
27     }
28     for (int i = 0; i < alen+blen; i++)//打印出合并后的数组
29     {
30         cout << A[i] << "    ";
31     }
32     cout << endl;
33 }
34 int main5()
35 {
36     int A[MaxArray+1] = { 1, 3, 5, 7, 8, 12 };
37     int B[] = { 13, 15, 16, 20 };
38     Combine_Array(A, B, 6, 4);
39     system("pause");
40     return 0;
41 }

得到输出为:

 

转载于:https://www.cnblogs.com/General-up/p/5396193.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值