C MergeSort-编译但不提供任何输出
这是基于Cormen的书中给出的算法。我做错了什么C MergeSort-编译但不提供任何输出,c,mergesort,C,Mergesort,这是基于Cormen的书中给出的算法。我做错了什么 #include <stdio.h> #include <conio.h> void mergesort(int a[],int,int); void merge(int a[],int,int,int); int main() { int i,num,a[50]; printf("Enter the number of elements : "); scanf("%d",&num);
#include <stdio.h>
#include <conio.h>
void mergesort(int a[],int,int);
void merge(int a[],int,int,int);
int main()
{
int i,num,a[50];
printf("Enter the number of elements : ");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("\n%d) ",i);
scanf("%d",&a[i]);
}
mergesort(a,1,num);
for(i=1;i<=num;i++)
{
printf("SoRTED ArrAy \n");
printf("\n%d) ",a[i]);
}
getch();
return 0;
}
void mergesort(int a[],int i, int k)
{
int j;
j=(i+k)/2;
while(i<k)
{
mergesort(a,i,j);
mergesort(a,j+1,k);
merge(a,i,j,k);
}
}
void merge(int a[],int p,int q,int r)
{
int i,j,k,n1,n2;
n1=q-p+1;
n2=r-q;
int l[n1],s[n2];
for(i=1;i<=n1;i++)
{
l[i]=a[p+i-1];
}
for(j=1;i<=n2;j++)
{
s[j]=a[q+j];
}
l[n1+1]=1000;
s[n2+1]=1000;
i=1;
j=1;
for(k=p;k<=r;k++)
{
if(l[k]<s[k])
{
a[k]=l[i];
i++;
}
else
{
a[k]=s[j];
j++;
}
}
}
#包括
#包括
无效合并排序(int a[],int,int);
无效合并(int a[],int,int,int);
int main()
{
int i,num,a[50];
printf(“输入元素数:”);
scanf(“%d”和&num);
对于(i=1;i主要问题是i
和k
在mergesort
函数中的while循环中从未更新,导致无限循环。很可能您甚至不需要while循环。主要问题是i
和k
在函数中的while循环中从未更新gesort
函数,导致无限循环。很可能您甚至不需要while循环。void mergesort(int a[],int i,int k)
void mergesort(int a[],int i, int k)
{
int j;
j=(i+k)/2;
while(i<k)
{
mergesort(a,i,j);
mergesort(a,j+1,k);
merge(a,i,j,k);
}
}
{
int j;
j=(i+k)/2;
while(ivoid mergesort(inta[],inti,intk)
{
int j;
j=(i+k)/2;
while(我)你说“无输出”是什么意思?试着运行……它只是在输入后快速运行。你需要提供更多信息。你用什么输入进行测试?你认为可能有什么问题?你有没有试过用调试器单步调试程序,看看会发生什么?当你说“输出错误”时,(1)你得到了什么,以及(2)你在期待什么?我的输入只是一个由5个整数组成的简单数组。我希望数组按升序排序。但是我得到的答案很奇怪。例如,我输入一个数组-9,5,2,1,2。我得到的输出是“排序数组1 9 3803680 2686368 1…”都是在几行中。“没有输出”是什么意思?试着运行…它只是在获取输入后运行。你需要提供更多信息。你用什么输入进行测试?你认为可能有什么错误?你是否尝试过用调试器单步执行程序以查看发生了什么?当你说“输出错误”时,(1)你得到了什么,以及(2)你在期待什么?我的输入只是一个由5个整数组成的简单数组。我希望数组按升序排序。但是我得到的答案很奇怪。例如,我输入了一个数组-9,5,2,1,2。我得到的输出是“排序数组1 9 3803680 2686368 1…”所有都在seprate行中。我应该对此程序做什么更改?如果重新阅读Cormen,您将看到mergesort递归调用由If控制,而不是由while控制。另一个问题…在将“while”更改为“If”后…它给出了错误的输出..ps.我还更正了Declaration中的L和R数组大小我应该在这个程序中做什么更改?如果你重新阅读Cormen,你会看到mergesort递归调用是由If控制的,而不是由while控制的。另一个问题…在将“while”更改为“If”之后…其输出错误..ps.我还更正了声明中的L和R数组大小另一个问题…在将“while”更改为“if”之后…其输出错误..ps.我还更正了声明中的L和R数组大小-另一个问题…在将“while”更改为“if”之后…它给出了错误的输出..ps.我还更正了声明中的L和R数组大小-