廢話不多說了,直接上代碼。如果不會輕看維基百科。
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;
}
#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)。歸併排序是遞歸排序算法,使用了分治、二分的思想,把一個數組分為兩個部分,把這每個部分再分為兩個部分,就這樣一次一次的分下去,然後再把它們一次通過歸併操作合併起來,最後完成排序操作。
例題:通過歸併排序尋找逆序對
沒有留言:
張貼留言