为什么这个快速排序的实现从一个void函数返回?

Why does this implementation of quicksort return from a void function?

本文关键字:一个 void 返回 函数 快速排序 实现 为什么      更新时间:2023-10-16
#include<iostream>
using namespace std;
template <class Item>
void quicksort(Item a[], int l, int r)
{
    if (r <= 1) return;
    int i = partition(a, l, r);
    quicksort(a, l,   i-1);
    quicksort(a, i+1, r);
}

这个程序取自Robert Sedgewick的Algorithms in c++ 。在这个程序中我有一个困惑。我们正在使用一个返回类型为void的函数。我们用的是return。如果return不返回任何值,它在这个程序中做什么?

如果r小于等于1,则return从函数"返回"到调用函数。它基本上告诉你,如果r不是2或更大,继续是没有意义的。

参见如果void()不返回值,为什么要使用它?

如果在return之后没有指定任何值,则表示返回void

return; 

将不返回任何东西,这与quicksort函数声明的void返回类型相匹配。这也意味着在本例中它将返回到quicksort函数的调用者。

void函数中的return语句立即退出该函数。在这里,使用return语句,以便如果要对大小为0或1的数组进行排序,则函数对其不做任何操作,也不继续递归。该函数也可以使用if语句编写,如下所示:

template <class Item> void quicksort(Item a[], int l, int r) {
    if (r > 2) {
        int i = partition(a, l, r);
        quicksort(a, l,   i-1);
        quicksort(a, i+1, r);
    }
}

这个函数的含义与你原来的函数相同,但是没有显式地包含return语句。

希望这对你有帮助!

return部分只是一个早期终止命令。如果r<=1为true,它将停止该函数,并阻止其余代码的运行。这段代码的要点是,如果有一个或0个元素,则不需要排序。

在您的示例中,return只是用于退出函数,即返回到调用它的地方。

使用return是为了不继续执行函数的其余部分。

顾名思义…它从函数返回

返回后的代码不会运行。

(阅读其他100个答案,你永远不会忘记这一点)。

实际上并没有返回一个值。return语句所做的只是终止函数

你不想

int i=partition(a,l,r);
qucksort(a,l,i-1);
qucksort(a,i+1,r);
如果

if(r<=1)

与此相关的是,我个人认为

if(r>1)
{
    int i=partition(a,l,r);
    qucksort(a,l,i-1);
    qucksort(a,i+1,r);
}

如果满足条件,仅用于在该点结束函数

具有void返回类型的函数中的return语句只是退出函数并返回给其调用者。然后,控制流从下一条指令或表达式求值开始继续。

还要注意,从void返回函数的末尾流出的语句相当于return语句,例如:
return;

看这个答案:我可以在void函数中返回吗?

在这个特定的例子中,我猜测作者想要这样做来停止函数的进一步执行。

该版本的快速排序将对输入数组进行就地排序(而不是返回已排序的数组)。如果数组有一个或更少的元素,if (r <= 1) return;行将提前从函数返回,跳过函数中其余的语句。

所以,它不返回任何值,它只是返回控制到它被调用的地方而不做任何输入