#include <iostream>
using namespace std;
//[s,m]和[m+1,t]的合并
void merge (int r[],int r1[], int s,int m, int t)
{
int i=s,j=m+1,k=s;
while((i<=m )&&(j<= t))
{
if (r[i]<=r [j])
{
r1[k++]=r [i++];
}
else
{
r1[k++]=r [j++];
}
}
if (i<=m )
{
while(i<=m )
r1[k++]=r [i++];
}
else
while(j<=t )
r1[k++]=r [j++];
//必须非常注意,必须加上
for (int x= s;x<=t ;x++) //排完序过后一定要将有序的序列更新到 r[]数组中,因为下次还是用 r[]进行比较的
//归并排序要求归并的是两个有序的序列
{
r[x]=r1[x];
}
}
//二路归并总的递归过程
void mergesort (int r[],int r1[], int s,int t)
{
if (s<t)
{
int m=(s+t)/2;
mergesort(r,r1,s,m);
mergesort(r,r1,m+1,t);
merge(r,r1,s,m,t);
}
}
int main ()
{
//初始化
int r[10]={10,1,20,5,4,13,6,9,8,7};
int r1[10];
for (int i=0; i<10;i ++)
{
r1[i]=0;
}
//调用,排序
mergesort(r,r1,0,9);
for (int i=0; i<10;i ++)
{
cout<<r1 [i]<< " ";
}
system("pause" );
return 0;
}
二路归并c++完整版,可运行
最新推荐文章于 2022-09-25 16:03:39 发布