LeetCode Online Judge 题目C# 练习 - Merge Sorted Array

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,大的先走!

posted @ 2012-09-28 05:04  ETCOW  阅读(295)  评论(0编辑  收藏  举报