2013-04-29 62 views
3
#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

回答

2

您使用return見,爲了不繼續執行函數的其餘部分。

正如其名稱所示,它從返回

返回後的代碼無法運行。

(閱讀其他100個答案,你永遠不會忘記這一點)。

1

它實際上並沒有返回值。所有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); 
} 
2

return部分只是提前終止命令。如果r<=1爲真,它會停止該功能,並阻止其他代碼運行。這段代碼的意思是,如果你有一個或零個元素,你不需要排序。

1

它只是用來結束當時的功能,如果條件得到滿足。

1

A return語句在具有void返回類型的函數中僅從函數退出並返回給調用者然後控制流從下一條指令或表達式評估繼續。

還要注意,使流過一個void -returning功能到底是相當於return的語句,如:

return; 
2

在你的榜樣回報只是用來走出函數即返回到它被稱爲的地方。

3

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聲明。

希望這會有所幫助!

3

如果在return之後沒有指定任何值,則表示返回void

return; 

不會返回任何東西,其中quicksort函數的聲明void返回類型相匹配。這也意味着在這種情況下它將返回給quicksort函數的調用者。