合并两个排序的数组
2015-01-15 21:47
197 查看
1.问题描述
有俩个排序的数组A1,A2,内存在A1的末尾有足够多的空余空间容纳A2,请实现一个函数,把A2中所有的数字插入到A1中并且所有的数字是排序的。(来自《剑指offer》)
2.分析
其实和之前写的一道替换空格的程序类似,都是数组的从后向前遍历的例子。这道题也同样,从前向后复制每个数字需要重复移动数字多次,从后向前复制可以减少移动次数,从而提高效率。
3.代码
此题同样是提醒大家遍历数组时,考虑一下从后向前遍历是否对要解决的问题能高效些。
有俩个排序的数组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--; } }
此题同样是提醒大家遍历数组时,考虑一下从后向前遍历是否对要解决的问题能高效些。
相关文章推荐
- 最坏情况下,合并两个大小为n的已排序数组所需要的比较次数
- 一个面试官经常问到的题,将两个数组合并到一个数组中,并排序。
- LeetCode --两个排序数组合并问题
- 9.11排序与查找(一)——给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。将B合并入A并排序
- 【Java】两个排序后的数组A和B,其中A的末端有足够的缓冲容纳B。编写一个方法,将B合并入A并排序。
- 合并两个已经排序的数组
- 两个已排序数组的合并-C语言
- 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
- 合并两个排序的数组
- 剑指offer面试题java实现之题4之相关题目:两个排序数组合并
- 将两个整形数组排序后合并成一个数组
- 面试题整理 4 合并两个排序的数组
- 两个数组合并,去掉重复的然后再排序
- 合并两个已经排序的数组
- [转载]:合并两个已排序好的int数组,并排序返回c#实现
- 合并两个排序数组
- 合并两个静态数组并排序
- C# 合并两个int数组 合并后根据大小排序 并输出
- 已知m和n是已经排序好的数组,从小到大,现在要合并这两个数组内的数到一个数组,仍然要求是从小到大排序
- 如何合并两个数组为一个数组,并且排序。