题目:有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请写一个函数,把A2的所有数字插入A1中,并且所有的数字是排序的。
题目上的条件是内存在A1的末尾有足够的空余空间容纳A2。所以跟归并排序还不太一样。跟上一篇文章的替换空格的解决方案很像。
首先计算merged后数组的总长度。声明一个指针indexMerged,指向merged后的数组的末尾。
声明两个数组索引指针,分布遍历两个数组,比较值的大小,将较大的值放在indexMerged的位置中,indexMerged指针向前移动一位,继续遍历即可。
demo:
import java.util.Arrays;
public class TestDemo {
public static void main(String[] args) {
int[] A1= {1,2,3,5,0,0,0,0,0,0,0};
int[] A2={0,2,3,6,7,8,9};
merge(A1,A2,4,7);
System.out.println(Arrays.toString(A1));
}
public static void merge(int[] A1, int[] A2,int lengthA1, int lengthA2){
int indexA1=lengthA1 -1;
int indexA2=lengthA2 -1;
int indexMerged = lengthA1 + lengthA2 -1;
while(indexA1>=0 && indexA2>=0){
if(A1[indexA1]>A2[indexA2]){
A1[indexMerged] =A1[indexA1];
indexMerged--;
indexA1--;
}else{
A1[indexMerged] =A2[indexA2];
indexMerged--;
indexA2--;
}
}
while (indexA2>=0){
A1[indexMerged] =A2[indexA2];
indexMerged--;
indexA2--;
}
}
}