Crack Interview 9.1 合并排序数组

 

#include <iostream>
#include <stack>
#include <string>
using namespace std;

//merge a b两个排序过的数组,a的size是m,b的size是n,a具有足够大的空间存放merge后的元素们
//思想是从后往前merge,因为后面都是没有存放数的空间,所以可以避免数组的平移
void Merge(int a[], int b[], int m, int n)
{
    int mWalker = m-1;
    int nWalker = n-1;
    for (int i = m+n-1 ; i > 0; i--){
        if (a[mWalker] > b[nWalker])
            a[i] = a[mWalker--];
        else
            a[i] = b[nWalker--];
    }
}

int main()
{
    int a[10] = {0, 5, 10, 15, 20, 25};        //总大小为10,有效元素6个
    int b[4] = {3, 13, 17, 23};                //有效元素4个
    Merge(a, b, 6, 4);
    for (int i = 0; i < 10; i++)
        cout<<a[i]<<endl;
    return 0;
}

 

 

 

 

 

 

 

EOF

posted on 2012-12-14 16:29  kkmm  阅读(294)  评论(0编辑  收藏  举报