申請SAE

如果您發現本博客的外觀很難看,那是因為部分外觀文件被中國.國家.防火.牆屏.蔽所致!
請翻~牆!

我的Wordpress博客的地址: http://zhuyf.tk/

2011年11月26日 星期六

經典算法:歸併操作 和 歸併排序 merge & merge sort

歸併操作就是把兩個已經有序的數組合併為一個數組的過程。
廢話不多說了,直接上代碼。如果不會輕看維基百科
C++语言: Codee#24222
//歸併操作(merge)
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;   
int A[1000],B[1000];
int C[2000];
int N;

void merge() 
{ 
    int p=0;
    int i=1,j=1;
    while(i<=N&&j<=N) 
    { 
        if(A[i]<B[j]) 
        { 
            C[++p]=A[i++]; 
        } 
        else  
        { 
            C[++p]=B[j++]; 
        } 
    } 
    while(i<=N) C[++p]=A[i++]; 
    while(j<=N) C[++p]=B[j++]; 
}

int main()
{
    freopen("merge.in","r",stdin);
    freopen("merge.out","w",stdout);

    cin>>N;
    for (int i=1;i<=N;i++)
        cin>>A[i];
    for (int i=1;i<=N;i++)
        cin>>B[i];
    merge();
   
    for (int i=1;i<=2*N;i++)
        cout<<C[i]<<" ";
   
    return 0;
}

通過歸併操作,我們可以實現歸併排序(Merge Sort)。歸併排序是遞歸排序算法,使用了分治、二分的思想,把一個數組分為兩個部分,把這每個部分再分為兩個部分,就這樣一次一次的分下去,然後再把它們一次通過歸併操作合併起來,最後完成排序操作。

例題:通過歸併排序尋找逆序對

沒有留言:

張貼留言