
c语言编写归并排序出现的问题,高手解答,我写的这个程序有出错提示,不知道怎么改,高手帮我修正一下! 10
intcombine(inta[],intleft,intmid,intright){intb1[];intb2[];intc[];inti=0,j=0,k=0;intl...
int combine(int a[],int left,int mid,int right)
{
int b1[];
int b2[];
int c[];
int i=0,j=0,k=0;
int l;
for(l=0;l<mid+1;l++)
b1[l]=a[l];
for(l=0;l<right-mid;l++)
b2[l]=a[mid+1+l];
sizeof(c)=sizeof(b1+b2);
while(left<right)
{
while(sizeof(b1)>0&&sizeof(b2)>0)
{
if(b1[i]<b2[i])
c[k++]=b1[i++];
else
c[k++]=b2[j++];
}
while(sizeof(b1>0))
c[k++]=b1[i++];
while(sizeof(b2)>0)
c[k++]=b2[j++];
}
return (c[right+1]);
}
int guib(int a[],int left,int right)
{
int mid;
if(left<right)
{
mid=(left+right)/2;
guib(a,left,mid);
guib(a,mid+1,right);
combine(a,left,mid,right);
}
}
main()
{
int i;
int a[8]={3,6,8,2,7,9,4,1};
guib(a,0,7);
for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
} 展开
{
int b1[];
int b2[];
int c[];
int i=0,j=0,k=0;
int l;
for(l=0;l<mid+1;l++)
b1[l]=a[l];
for(l=0;l<right-mid;l++)
b2[l]=a[mid+1+l];
sizeof(c)=sizeof(b1+b2);
while(left<right)
{
while(sizeof(b1)>0&&sizeof(b2)>0)
{
if(b1[i]<b2[i])
c[k++]=b1[i++];
else
c[k++]=b2[j++];
}
while(sizeof(b1>0))
c[k++]=b1[i++];
while(sizeof(b2)>0)
c[k++]=b2[j++];
}
return (c[right+1]);
}
int guib(int a[],int left,int right)
{
int mid;
if(left<right)
{
mid=(left+right)/2;
guib(a,left,mid);
guib(a,mid+1,right);
combine(a,left,mid,right);
}
}
main()
{
int i;
int a[8]={3,6,8,2,7,9,4,1};
guib(a,0,7);
for(i=0;i<8;i++)
printf("%d ",a[i]);
printf("\n");
} 展开
4个回答
展开全部
void merge(int a[], int start, int middle, int end)
{
int n = end - start + 1;
int *tmp = malloc(sizeof(int)*n);
int i,j;
int k = 0;
for(i=start,j=middle+1;i<=middle&&j<=end;){
if(a[i]<=a[j]){
tmp[k++] = a[i++];
}else{
tmp[k++] = a[j++];
}
}
if(i<=middle) memcpy(tmp+k, a+i, (n-k) * sizeof(int));
if(j<=end) memcpy(tmp+k, a+j, (n-k) * sizeof(int));
memcpy(a+start, tmp, n * sizeof(int));
free(tmp);
}
void merge_sort_core(int a[], int start, int end)
{
if(start<end){
int middle = (start+end)/2;
merge_sort_core(a, start, middle);
merge_sort_core(a, middle+1, end);
merge(a, start, middle, end);
}
}
{
int n = end - start + 1;
int *tmp = malloc(sizeof(int)*n);
int i,j;
int k = 0;
for(i=start,j=middle+1;i<=middle&&j<=end;){
if(a[i]<=a[j]){
tmp[k++] = a[i++];
}else{
tmp[k++] = a[j++];
}
}
if(i<=middle) memcpy(tmp+k, a+i, (n-k) * sizeof(int));
if(j<=end) memcpy(tmp+k, a+j, (n-k) * sizeof(int));
memcpy(a+start, tmp, n * sizeof(int));
free(tmp);
}
void merge_sort_core(int a[], int start, int end)
{
if(start<end){
int middle = (start+end)/2;
merge_sort_core(a, start, middle);
merge_sort_core(a, middle+1, end);
merge(a, start, middle, end);
}
}
展开全部
你定义数组都定义错了(没有指明大小,后面的没看):
int b1[];
int b2[];
int c[];
可以采用以下方式定义:
int b1[2];
或
int b1[] = {1,2,3,4,5};
int b1[];
int b2[];
int c[];
可以采用以下方式定义:
int b1[2];
或
int b1[] = {1,2,3,4,5};
更多追问追答
追问
这是小问题,后面的你看一下,整个程序你看一下,帮我纠正一下。
追答
1.书写错误:sizeof(b1>0)
2.语法错误:sizeof(c)=sizeof(b1+b2);
sizeof(c)不能作为左值。
3.如果数组定义int b1[2];那么sizeof(b1)大小是不变的,不能作为while的边界条件使用
暂时发现这些
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
出什么错?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询