題目:
有兩個排序的數組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 }