二路归并排序:O(n乘以log以2为底,n的对数),空间复杂度O(n)
//将R[low,mid]与R[mid+1,high]合并,使最后R[low,high]有序
void Merge(int R[],int low,int mid,int high)
{
int *R1=(int *)malloc((high-low+1)*sizeof(int));
int i=low,j=mid+1,k=0;
while(i<=mid && j<=high)
{
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<=high)
{
R1[k]=R[j];
j++;k++;
}
for(k=0,i=low;i<=high;k++,i++)
R[i]=R1[k];
free(R1);
}
void MergeSort(int R[],int i,int j)
{
int k;
if(i<j)
{
k=(i+j)/2;
MergeSort(R,i,k);
MergeSort(R,k+1,j);
Merge(R,i,k,j);
}
}
二路归并排序
最新推荐文章于 2022-07-15 15:57:48 发布