两个有序数组,合并成一个有序数组!
来源:互联网 发布:Linux spid 编辑:程序博客网 时间:2024/05/04 18:27
问题:
两个有序数组,合并成一个有序数组,假设第一个数组空间足够容纳两个数组。
分析:
考虑到a数组很大,可以直接在a数组上进行合并,但是要讲究效率。如果单纯从前往后合并,那么效率会非常低,因为a数组后面的数字需要不停的移动。换一种思路,我们采用从后往前合并,首先计算出总长度,设置一个指针从a数组最后往前移动。
算法代码:
- #include <iostream>
- #include <cstdio>
- #include <cstdlib>
- using namespace std;
- #define MAX 1024
- void combine(int *a, int *b, int len1, int len2)
- {
- if(a == NULL || b == NULL || (len1 + len2) > MAX)
- return ;
- int new_point;
- int a_point = len1 - 1;
- int b_point = len2 - 1;
- new_point = len1 + len2 -1; //总的长度
- while(a_point >= 0 && b_point >= 0)
- {
- if(a[a_point] > b[b_point])
- {
- a[new_point--] = a[a_point--];
- }
- else
- {
- a[new_point--] = b[b_point--];
- }
- }
- while(a_point >= 0)
- {
- a[new_point--] = a[a_point--];
- }
- while(b_point >= 0)
- {
- a[new_point--] = b[b_point--];
- }
- return ;
- }
- int main()
- {
- int b[MAX] = {1,2,3,4};
- int a[MAX] = {5,6,7,8};
- combine(a, b, 4, 4);
- for(int i =0 ; i <= 4 + 4 -1; i++)
- {
- cout << a[i] << " ";
- }
- return 0;
- }
总结:
字符串合并时,我们更应该考虑从后往前这种思路。
0 0
- java将两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组,合并成一个有序数组!
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成一个有序数组
- 两个有序数组合并成有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- 合并两个有序数组
- Java.lang.NoClassDefFoundError
- linux读取配置文件(C语言版)
- SharePoint部署WSP解决方案包,部署Feature
- 博弈模板
- C语言编译全过程介绍
- 两个有序数组,合并成一个有序数组!
- boost asio的一个异步调用小测例
- 实习生笔试
- xtuyfyi
- 设计模式-单例模式
- phpnow出现错误重新配置办法
- 用iframe在您的网站中加入findjar的功能
- curl编译,Windows/Ubuntu
- 简单绘图(二)