题目:
有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请写一个函数,把A2的所有数字插入A1中,并且所有的数字是排序的。
首先想到的思路是从A1从头到尾复制数字,但是就会出现多次复制一个数字的情况。更好的办法是从尾到头比较A1和A2的数字,并把较大的数字,复制到A1中的合适位置。
1 class solution{ 2 public static void merge(int[] A1, int[] A2, int lengthA1, int lengthA2){ 3 int indexA1 = lengthA1-1; 4 int indexA2 = lengthA2-1; 5 int indexMerged = lengthA1+indexA2-1; 6 7 while(indexA1>=0&&indexA2>=0){ 8 if(A1[indexA1] >= A2[indexA2]){ 9 A1[indexMerged] = A1[indexA1]; 10 indexMerged--; 11 indexA1--; 12 }else{ 13 A1[indexMerged] = A2[indexA2]; 14 indexMerged--; 15 indexA2--; 16 } 17 } 18 19 while(indexA1>=0){ 20 A1[indexMerged] = A1[indexA1]; 21 indexMerged--; 22 indexA1--; 23 } 24 25 while(indexA2>=0){ 26 A1[indexMerged] = A2[indexA2]; 27 indexMerged--; 28 indexA2--; 29 } 30 31 } 32 33 }