qingcheng奕  

http://oj.leetcode.com/problems/merge-sorted-array/

两个有序数组A和B的归并排序,将结果存到A中。因为已知两数组长度且A的数组足够大,所以倒着处理,如果正着的话,会有好多往后挪的操作。

#include <iostream>
using namespace std;

class Solution {
public:
    void merge(int A[], int m, int B[], int n) {
        if(m<0|| n<0)
            return;
        if(n == 0)
            return ;
        if(m ==0)
        {
            for(int i = 0;i<n;i++)
                A[i] = B[i];
        }
        int a_pointer = m -1;
        int b_pointer = n-1;
        int c_pointer = m+n-1;
        while(a_pointer!=-1 && b_pointer!= -1)
        {
            while(a_pointer != -1 &&b_pointer!= -1 && A[a_pointer]>=B[b_pointer])
            {
                A[c_pointer] = A[a_pointer];
                c_pointer--;
                a_pointer--;
            }
            while(a_pointer!= -1 && b_pointer != -1 &&A[a_pointer]<B[b_pointer] )
            {
                A[c_pointer] = B[b_pointer];
                c_pointer--;
                b_pointer--;
            }
        }
        if(a_pointer == -1 && c_pointer!= -1)
            for(int i = 0;i<=c_pointer;i++)
                A[i] = B[i];
        for(int i = 0;i<=m+n-1;i++)
            cout<<A[i]<<endl;
    }
};

int main()
{
    Solution myS;
    int A[20] = {1,3,7,9,12,19,21};
    int B[20] = {2,4,5,6,8,10};
    myS.merge(A,3,B,0);
    return 0;
}

 

posted on 2014-05-06 10:13  qingcheng奕  阅读(129)  评论(0)    收藏  举报