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

转载于:https://www.cnblogs.com/etcow/archive/2012/09/28/2706520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值