//归并排序
//这里排序数组要从下标1开始
#include <iostream>
using namespace std;
void merge(int R[],int low,int mid,int hight)
{
int *R1=new int[mid-low+1];
int i=low,j=mid,k=0;
while(i<mid&&j<=hight)
{
if(R[i]<R[j])
{
R1[k]=R[i];
i++;k++;
}
else
{
R1[k]=R[j];
j++;k++;
}
while(i<mid)
{
R1[k]=R[i];
i++;k++;
}
while(j<=hight)
{
R1[k]=R[j];
j++;k++;
}
}
}
void mergepass(int R[],int length,int n)
{
int i;
for(i=1;i+2*length-1<=n;i=i+2*length)
{
merge(R,i,i+length,n);
}
if(i+length-1<n)
{
merge(R,i,i+length,n);
}
}
void mergesort(int R[],int n)
{
int length;
for(length=1;length<=n;length=2*length)
mergepass(R,length,n);
}
归并排序
最新推荐文章于 2022-05-18 21:50:25 发布