为什么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返回类型的函数。我们正在使用returnreturn在这个程序中做什么,如果它不会返回任何值?为什么quicksort的这个实现从void函数返回?

+2

让答案流动:) – stardust 2013-04-29 16:59:16

+1

您得到upvote,你会得到upvote,每个人都会得到upvote:P – stardust 2013-04-29 17:01:08

+0

@Named是的,对问题和答案的演变有一个有趣的观察(但显然没有重复)... – 2013-04-29 17:46:37

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

If void() does not return a value, why do we use it?

您使用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; 

在你的榜样回报只是用来走出函数即返回到它被称为的地方。

看到这个答案:Can I return in void function?

在这种特定的情况下,我的猜测是,作者的意图,中止功能的进一步执行。

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函数的调用者。