合并两个排序的数组
来源:互联网 发布:茵曼淘宝网店 编辑:程序博客网 时间:2024/06/09 16:25
1.问题描述
有俩个排序的数组A1,A2,内存在A1的末尾有足够多的空余空间容纳A2,请实现一个函数,把A2中所有的数字插入到A1中并且所有的数字是排序的。(来自《剑指offer》)
2.分析
其实和之前写的一道替换空格的程序类似,都是数组的从后向前遍历的例子。这道题也同样,从前向后复制每个数字需要重复移动数字多次,从后向前复制可以减少移动次数,从而提高效率。
3.代码
void MerageArray(int *a1,int *a2,int a1Length,int a2Length,int a1Volume){ int merageLength = a1Length + a2Length; //边界检查 if (!a1 || !a2 || merageLength > a1Volume || a1Length <= 0 || a2Length <= 0) { return; } int index = merageLength-1; //用来指向a1或a2中元素要被复制到的位置 int a1Index = a1Length-1; //指向a1中要复制元素的位置 int a2Index = a2Length-1;//指向a2中要复制元素的位置 while (index >= 0 && a1Index >= 0 && a2Index >= 0) { if(a1[a1Index] > a2[a2Index]) { a1[index] = a1[a1Index]; a1Index--; } else { a1[index] = a2[a2Index]; a2Index--; } index--; } while (index >= 0 && a1Index >= 0) { a1[index] = a1[a1Index]; index--; a1Index--; } while (index >= 0 && a2Index >= 0) { a1[index] = a2[a2Index]; index--; a2Index--; } }
此题同样是提醒大家遍历数组时,考虑一下从后向前遍历是否对要解决的问题能高效些。
0 0
- 合并两个排序的数组
- 合并两个排序的数组
- 合并两个排序数组
- 合并两个排序数组
- 合并两个排序数组
- 合并两个排序数组
- 合并两个已经排序的数组
- 两个已排序的数组进行合并
- 合并两个已经排序的数组
- 合并两个已排序的数组
- 合并两个已排序数组
- 合并两个已经排序的数组为另一个数组
- 两个数组的合并
- 两个数组合并,去掉重复的然后再排序
- 面试题整理 4 合并两个排序的数组
- 两个数组合并,去掉重复的然后再排序
- [剑指offer]面试题17:合并两个排序的数组
- 给两个排序好的数组,怎么求两个数组合并后的中位数?
- FileInputStream/FileOutputStream的应用
- Kaggle竞赛题目之——Digit Recognizer
- 实现字符串全排列
- LeetCode | #7 Reverse Integer
- 标准代发
- 合并两个排序的数组
- avaweb入门实例---servlet例子
- 算法与数据结构是在讨论什么
- c++ primer plus 习题6.3(switch)
- 直连网银
- 写给我的2014——也写给我即将逝去的研究生生涯
- friend & operator
- 考试系统维护-批量修改图片名称
- 十二、函数能够判断一个数字是否是一个素数(并给出一个范围求出这个范围内所有的素数)