void merge_sort(int a[],int start,int end)
{
int p=start;
int m=(end+start)/2;
int q=m+1;
int i=0;
int *b=(int *)malloc(sizeof(int)*(end-start+1));
if(start<end)
{
merge_sort(a,start,m);
merge_sort(a,q,end);
while(p<=m&&q<=end)
{
if(a[p]<a[q])
b[i++]=a[p++];
else
b[i++]=a[q++];
}
while(q<=end)
b[i++]=a[q++];
while(p<=m)
b[i++]=a[p++];
p=start;
i=0;
while(p<=end)
a[p++]=b[i++];
}
free(b);
}
对两个已经排好序的数组进行合并排序,要有一个数组辅助,从两个数组的第一个元素开始比较,取小的(这里从小到大)那个,然后将读取位置移动到下一个位置,继续比较,最后将剩余的没有比较的元素直接加入辅助数组。这时候只要复制辅助数组的元素到原数组就行了。
合并排序
最新推荐文章于 2022-03-08 22:14:51 发布