C++两个有序数组合并
2016-03-11 18:35
369 查看
源自剑指offer中的思考题,有序数组A、B,A有足够空间容纳B,将A,B按顺序排列。
思路:
也是用两个指针从尾部开始进行依次比较,较大的放在新数组的后边,然后指针依次转移。
1. la,lb分别指向A和B的尾部,index指向融合数组的尾部
2.然后比较,大的放在index出,index向前移动一位,然后大的la或者lb向前移动一位
思路:
也是用两个指针从尾部开始进行依次比较,较大的放在新数组的后边,然后指针依次转移。
1. la,lb分别指向A和B的尾部,index指向融合数组的尾部
2.然后比较,大的放在index出,index向前移动一位,然后大的la或者lb向前移动一位
#include<iostream> using namespace std; //两个有序数组进行排序,A有足够的空间容纳B,把和A融入到一起 void MergeArr(int a[], int b[], int la, int lb)//输入A和B的数组和两个长度 { if (la <= 0 || lb <= 0) return; int index=la+lb-1; int ida = la - 1; int idb = lb - 1; while (index >= 0) { if (a[ida] > b[idb]||idb<0) //注意边界条件,当一个数组中没有元素时,也要移动 a[index--] = a[ida--]; else if (a[ida]<=b[idb]||ida<0) a[index--] = b[idb--]; } } int main() { int a[10] = { 3, 5, 7, 10, 15 }; int b[] = { 4, 8, 16 }; MergeArr(a, b, 5, 3); for (int i = 0; i < 3 + 5; i++) { cout << a[i] << endl; } return 0; }
相关文章推荐
- 《你必须知道的495个C语言问题》读书笔记之第3章:表达式
- 32位C/C++程序移植到64位系统时需要注意的问题
- 快速排序小规模数据
- C++指针加整数、两个指针相减的问题
- C++第1次实验
- 2014年第五届蓝桥杯试题(C/C++本科B组)
- c++ 类成员函数 作回调函数
- string类实现
- asm基础——在c/c++语言中调用asm函数
- c++第一次实验-1
- 关于mapC++ map的基本操作和使用
- C++常用知识列表
- C语言中易被忽略或者混淆的东西
- C++常用第三方库及使用注意事项
- c++primer(第五版) 第十二章 动态内存习题答案
- 动态内存
- c++错误日志之getline()函数
- 快速排序的非递归写法
- 《More Effective C++》Rule 6:区别递加和递减符号的前置和后置形式
- C语言基本概念之表达式