为什么这个快速排序的实现从一个void函数返回?
Why does this implementation of quicksort return from a void function?
#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;
行将提前从函数返回,跳过函数中其余的语句。
所以,它不返回任何值,它只是返回控制到它被调用的地方而不做任何输入
- 如何将指针从一个void函数传递到另一个C++
- 如何将一个 void 函数传递给另一个 void 函数?
- 定义一个 void f(void) 函数,但使用来自同一范围的变量?
- 除了调用全局删除运算符之外,删除一个void指针还能做什么呢
- 将 void 指针分配给另一个 void 指针
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 如何在堆上分配一个void*阵列
- 虚幻c++使用LineTrace从Actor调用一个void
- 如何创建一个 void 数组,其大小将由用户从命令行输入指定
- 复制值从一个void **到C 复制构造函数中的另一个void **
- 返回一个void数组*
- static_cast一个void*指针可以吗
- 如何在C++中使一个void函数与另一个void功能协同工作
- 有没有任何情况下,变量可以被赋予一个void函数
- 为什么我们不能声明一个 void 类型的变量?
- 我在我的程序中添加了一个void函数,它不接受任何参数,现在我的程序在运行时只返回一个空白终端
- 如何将地址对齐到一个void指针
- 使用malloc和一个void指针复制一个临时结构
- 为什么这个快速排序的实现从一个void函数返回?
- 将不同的数据类型组合成一个void类型