快排的遞迴和非遞迴版本

2021-07-10 13:48:26 字數 722 閱讀 2067

(1)算導版本(偽**):

(2)前後依次覆蓋版本:

#include#include#include#include#includeusing namespace std;

/**把陣列分為兩部分,軸pivot左邊的部分都小於軸右邊的部分**/

template int partition(vector&vec,int low,int high){

comparable pivot=vec[low]; //任選元素作為軸,這裡選首元素

while(low=pivot)

high--;

vec[low]=vec[high];

while(lowvoid quicksort1(vector&vec,int low,int high){

if(low

/**使用棧的非遞迴快速排序**/

templatevoid quicksort2(vector&vec,int low,int high){

stackst;

if(lowvec;

for(int i=0;i

非遞迴快排

通過使用棧來模擬函式棧的呼叫,每次將首尾指標存入到棧中,並對首尾之間區域進行快排。include include include using namespace std 利用棧將序列的起始和末尾儲存起來 int partition vector v,int s,int e swap v s v i ...

快排非遞迴實現

int partition int arr,int low,int high arr low pivot return low void non recursive qsort int arr,int low,int high if high pivot 1 其實就是用棧儲存每乙個待排序子串的首尾元...

遞迴到非遞迴轉換 歸併排序與快排的非遞迴實現

在高階語言中,函式的引數傳遞是由棧來實現的,後呼叫的函式的引數在棧的上部,先呼叫的函式的引數在棧的下部,在實現遞迴函式時,每一次呼叫的引數等資訊都會儲存在棧中,這樣在資料比較在時會出現棧溢位的錯誤,而且反覆呼叫函式,會使效率變的較低,在 中對 萬個數排序,用遞迴的快排花了 而用非遞迴,需要 而我們可...