#include <stdio.h>
#include <stdlib.h>
int temp[10001];
void marge(int *list,int L,int mid,int R);
int* margesort(int *list,int L,int R);
/*归并*/
void marge(int *list,int L,int mid,int R)
{
int i = L,j = mid+1,n = mid,m = R;
int k = 0;
while (i <= n && j <= m)
{
if(list[i] < list[j])
temp[k++] = list[i++];
else
temp[k++] = list[j++];
}//当比较晚之后某数组还有剩余元素
while(i <= n)temp[k++] = list[i++];
while(j <= m)temp[k++] = list[j++];
for(i = 0;i < k;i++)
list[L+i] = temp[i];
}
/*切割*/
int* margesort(int *list,int L,int R)
{
if(L < R)
{
int mid = (L+R) >> 1;
margesort(list,L,mid);
margesort(list,mid+1,R);
marge(list,L,mid,R);
}
return list;
}
int main(int argc, char const *argv[])
{
int *list,size,i;
printf("请输入数组大小:");
scanf("%d",&size);
list = (int*)malloc(sizeof(int)*size);
printf("请输入%d个元素:\n",size);
for(i = 0;i < size;i++)
scanf("%d",&list[i]);
list = margesort(list,0,size-1);
printf("排序结果:");
for(i = 0;i < size;i++)
printf("%d%c",list[i]," \n"[i == size-1]);
return 0;
}
王道考研 ++++ 归并排序
猜你喜欢
转载自blog.csdn.net/WX_1218639030/article/details/100181309
今日推荐
周排行