#include <stdio.h>
void merge(int is1[],int left,int last,int mid)
{
int i=left,j=mid+1,k=left,is2[1000];
while(i<=mid&&j<=last)
if(is1[i]<=is1[j]) // 此处为排序顺序的关键,用小于表示从小到大排序。实际上就是把is1分成两个数组,第一从left到mid,第二个从mid+1到last,把这两个数组合成一个数组即可
is2[k++]=is1[i++];
else
is2[k++]=is1[j++];
while(i<=mid)
is2[k++]=is1[i++];
while(j<=last)
is2[k++]=is1[j++];
for(i=left;i<=last;i++)// 写回原数组
is1[i]=is2[i];
}
void merge_sort(int number[],int first,int last)
{
int mid=0;
if(first<last)
{
mid=(first+last)/2;
merge_sort(number,first,mid);//划分左半部分
merge_sort(number,mid+1,last);//划分右半部分
merge(number,first,last,mid);//合并
}
}
int main()
{
int number[]={1,3,4,2,6,7,4,5,9,8,44},n=11,i;
merge_sort(number,0,n-1);
for(i=0;i<n;i++)
printf("%d ",number[i]);
return 0;
}
归并排序算法
最新推荐文章于 2024-11-09 08:00:00 发布