您的位置:首页 > 其它

小sugar呀——归并排序

2016-07-09 07:49 274 查看
day2

嘛嘛嘛,昨天看了一天都不知道哪里错了,最后还是放到百度知道上,大神给改了改。感谢 百度ID:电灯剑客

归并排序,求大神帮忙看一下哪里错了。_百度知道

http://zhidao.baidu.com/question/1897853185788016180.html

#include<stdio.h>
#include<stdlib.h>
void merge(int a[],int p,int q,int r)//合并
{
int n1,n2,i,j,k;
n1=q-p+1;
n2=r-p;
int left[n1];
int right[n2];
for(i=0; i<n1; i++)
left[i]=a[p+i];//注意这里要写成a[p+i]
for(j=0; j<n2; j++)
right[j]=a[q+1+j];
i=j=0;
k=p;//注意是k=p
while(i<n1&&j<n2)
{
if(left[i]<right[j])
a[k++]=left[i++];
else a[k++]=right[j++];
}
while(i<n1)
{
a[k++]=left[i++];
}
while(j<n2)
{
a[k++]=right[j++];
}
}
void mergesort(int a[],int p,int r)//递归
{
int q;
if(p<r)
{
q=(p+r)/2;
mergesort(a,p,q);
mergesort(a,q+1,r);
merge(a,p,q,r);
}
}
int main()
{
int a[8]= {2,5,4,8,7,6,1,3};
int i;
for(i=0; i<8; i++)
printf("%-2d",a[i]);
printf("\n");
mergesort(a,0,7);
for(i=0; i<8; i++)
printf("%-2d",a[i]);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  归并排序