为什么quicksort的这个实现从void函数返回?
#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的C++算法。这个计划中我有一个困惑。我们正在使用具有void
返回类型的函数。我们正在使用return
。 return
在这个程序中做什么,如果它不会返回任何值?为什么quicksort的这个实现从void函数返回?
return
如果r
小于或等于1,则从函数返回到调用函数。它基本上告诉您,如果r
不是2或更大,则继续无意义。
您使用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);
}
return
部分只是提前终止命令。如果r<=1
为真,它会停止该功能,并阻止其他代码运行。这段代码的意思是,如果你有一个或零个元素,你不需要排序。
它只是用来结束当时的功能,如果条件得到满足。
A return
语句在具有void
返回类型的函数中仅从函数退出并返回给调用者然后控制流从下一条指令或表达式评估继续。
还要注意,使流过一个void
-returning功能到底是相当于return
的语句,如:
return;
在你的榜样回报只是用来走出函数即返回到它被称为的地方。
在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
之后没有指定任何值,则表示返回void
。
return;
不会返回任何东西,其中quicksort
函数的声明void
返回类型相匹配。这也意味着在这种情况下它将返回给quicksort
函数的调用者。
让答案流动:) – stardust 2013-04-29 16:59:16
您得到upvote,你会得到upvote,每个人都会得到upvote:P – stardust 2013-04-29 17:01:08
@Named是的,对问题和答案的演变有一个有趣的观察(但显然没有重复)... – 2013-04-29 17:46:37