Given two sorted integer arrays A and B, merge B into A as one sorted array.
Note:
You may assume that A has enough space to hold additional elements from B. The number of elements initialized in A and B are m and n respectively.
1 public static void MergeSortedArray(int[] A, int m, int[] B, int n) 2 { 3 if (m == 0) 4 { 5 A = B; 6 return; 7 } 8 if (n == 0) 9 return; 10 11 //move all the element in A[] to the end 12 for (int i = 0; i < m; i++) 13 { 14 A[i + m] = A[i]; 15 } 16 17 //Merge 18 int p = m, q = 0, k = 0; 19 while (p < A.Length || q < B.Length) 20 { 21 if (p == A.Length) 22 { 23 A[k++] = B[q++]; 24 continue; 25 } 26 if (q == B.Length) 27 { 28 A[k++] = A[p++]; 29 continue; 30 } 31 32 if (A[p] <= B[q]) 33 { 34 A[k++] = A[p++]; 35 continue; 36 } 37 else 38 { 39 A[k++] = B[q++]; 40 continue; 41 } 42 } 43 }
代码分析:
O(n), 就是把A[]的数字全部移到尾部,再跟B[] merge。应该也可以直接从后往前merge,大的先走!