0

我正在为 C 中的快速排序排列函数编写代码,但在函数的递归调用中,它显示以下错误:Arrange(int,int) 无法返回值。

void Arrange(int left,int right){ 
    int i,j,x,w;
    i=left,j=right;
    x=(left+right)/2;
    do{
        while(struct[i].number < struct[x].number)i++;
        while(struct[j].number > struct[x].number)j--;
        if(i<=j){
            w=struct[i].number;
            struct[i].number=struct[j].number;
            struct[j].number=w;
            i++;j--;
  }}while(i<=j);
    if(left<j)
  return Arrange(left,j); //1st recursive call. It doesn't work.
    if(right>i)
  return Arrange(i,right); //2nd recursive call.It doesn't work either.
    };

为什么会这样?

这只是一个更大程序的功能,我没有发布它,因为它看起来更像是该功能的逻辑问题。它已经在完整程序中定义的结构。

4

6 回答 6

7

您的函数被声明为 return void。这使您的return关键字变得多余。只需删除它们。

于 2013-07-23T05:01:39.587 回答
3

您已将函数声明Arrange()void,显然void函数不能根据定义返回值。

正如@CarlNorum 所述,只需删除 return 语句。

于 2013-07-23T05:01:05.480 回答
2

在调用 Arrange 之前删除该return语句,因为 void 不返回任何内容。

}}while(i<=j);
    if(left<j)
  Arrange(left,j); //1st recursive call. It doesn't work.
    if(right>i)
  Arrange(i,right); //2nd recursive call.It doesn't work either.
};
于 2013-07-23T05:03:32.603 回答
1

返回的函数void意味着它根本不返回值。return如果你void的函数被声明为void.

由于这应该是一种快速排序,我假设您实际上想要对下半部分和上半部分进行排序。所以无论如何返回是错误的事情(返回会导致一半的数组未排序)。从递归调用中删除return关键字。让函数从函数的末尾落下,表示函数调用的结束。

if(left<j) Arrange(left,j);
if(right>i) Arrange(i,right);
于 2013-07-23T05:06:14.213 回答
1

语法:Return_Type Function_Name 参数

在这里你定义 void 意味着什么也不返回

于 2013-07-23T05:03:01.253 回答
0

函数的返回类型是void,所以函数不可能返回任何值。

于 2013-07-23T05:09:00.620 回答