#include<stdio.h>
//将两个序列sourceArr[start,mid],sourceArr[mid+1,end]排序归并到tempArr中
void Merge(int sourceArr[],int tempArr[],int start,int mid,int end)
{
int i = start,j=mid+1,k = start;
while(i!=mid+1 && j!=end+1)
{
if(sourceArr[i]<sourceArr[j])
tempArr[k++] = sourceArr[i++];
else
tempArr[k++] = sourceArr[j++];
}
//拷贝剩余元素
while(i!=mid+1)
tempArr[k++] = sourceArr[i++];
while(j!=end+1)
tempArr[k++] = sourceArr[j++];
//把临时数组中的数据拷贝回原始数组
for(i=start;i<=end;i++)
sourceArr[i] = tempArr[i];
}
//内部使用递归
void MergeSort(int sourceArr[],int tempArr[],int start,int end)
{
int mid;
if(start<end)
{
mid=(start+end)/2;
MergeSort(sourceArr,tempArr,start,mid); //左边有序
MergeSort(sourceArr,tempArr,mid+1,end); //右边有序
Merge(sourceArr,tempArr,start,mid,end); //再将二个有序数组合并
}
}
int main()
{
int a[8]={50,10,20,30,90,40,80,60};
int i,b[8];
MergeSort(a,b,0,7);
for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
归并排序(C语言)
最新推荐文章于 2022-07-03 12:53:11 发布