#include <stdio.h>
void merge(int a[],int b[],int left,int mid,int right)
{ //将数组a一分为二,先后的两段逐个比较,并记录到数组b
int i,j,k=left;
i=left;j=mid+1;
while(i<=mid &&j<=right)
{
if(a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
}
if(i<=mid)
{
while(i<=mid)
b[k++]=a[i++];
}
if(j<=right)
{
while(j<=right)
b[k++]=a[j++];
}
}
void copy(int a[],int b[],int left,int right)
{ //将已经排序好的数组b的元素全部拷贝到数组a
int i;
for(i=left;i<=right;i++)
a[i]=b[i];
}
void MSort(int a[],int b[],int left,int right)
{
if(left==right)
{
b[left]=a[left];
}
else
{
int mid=(left+right)/2;
MSort(a,b,left,mid);
MSort(a,b,mid+1,right);
merge(a,b,left,mid,right);
copy(a,b,left,right);
}
}
void mergeSort(int a[],int left,int right)
{
int b[6];
MSort(a,b,left,right);
}
void main()
{
int i,a[6]={3,2,1,6,5,4};
for(i=0;i<6;i++)
printf("%d ",a[i]);
printf("\n");
mergeSort(a,0,5);
for(i=0;i<6;i++)
printf("%d ",a[i]);
printf("\n");
}
归并排序(nlogn)
最新推荐文章于 2021-12-04 11:27:53 发布