Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C MergeSort-编译但不提供任何输出_C_Mergesort - Fatal编程技术网

C MergeSort-编译但不提供任何输出

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);

这是基于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);

   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(i
void 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数组大小-