高效合并两个有序数组
2013-10-18 00:03
253 查看
问题:
两个有序数组,合并成一个有序数组,假设第一个数组空间足够容纳两个数组。分析:
考虑到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; }
总结:
字符串合并时,我们更应该考虑从后往前这种思路。注:转载源地址
相关文章推荐
- 高效合并两个有序数组
- 高效合并两个有序数组(Merge Sorted Array)
- 高效合并两个有序数组(Merge Sorted Array)
- 高效合并两个有序数组
- 高效合并两个有序数组
- 面试or笔试4——合并两个有序数组为一个有序数组
- java将两个有序数组合并成一个有序数组
- 算法--两个有序数组合并
- 两个无序的数组 如何进行合并 为一个有序的数组
- 合并两个有序数组
- 将两个整型数组有序合并成一个数组
- java实现两个有序数组的合并
- 两个有序数组合并为一个有序数组
- 基础算法之三: 合并两个有序数组
- Java将两个有序链表合并为一个有序链表、将两个有序数组合并成一个有序数组
- 1124: 两个有序数组合并
- 【leetcode】合并两个有序数组
- 将两个有序的数组合并成一个有序的数组
- 将两个排好序的数组,合并到另外一个数组中,并且合并之后的数组也是有序的。
- 两个有序数组的合并排序,Java代码实现,并去重复,考虑空间利用率问题