快速排序的非遞迴實現(棧)

2021-06-27 04:24:59 字數 1188 閱讀 6295

/*

*快速排序非遞迴基本思想:

* 將每一段的頭和尾放在棧中,在逐步出棧。

* 首先先建乙個棧或者呼叫stl(標準模板庫)中

* 棧函式。在標頭檔案中。

*/#include #include #include using namespace std;

#define size 20

typedef int datatype;

typedef int position;

int getpositon(datatype digit, const int low, const int high);

void quicksortstack(datatype digit, const int low, const int high);

void paintquicksort(datatype digit, const int lengthofdigit);

int main(void)

; paintquicksort(digit, size);

quicksortstack(digit, 0, size-1);

paintquicksort(digit, size);

return 0;

}int getpositon(datatype digit, const int low, const int high)

while(i < j && temp > digit[i]) i++;//在標準值的左側進行掃瞄

if(i < j)

}digit[i] = temp;// digit[j] = temp 也可以

return i;//return j;都可以因為 i == j

}void quicksortstack(datatype digit, const int low, const int high)

//if(mid < high) //這幾步是在設定第一步操作

//while(!st.empty() && st.size() %2 == 0)//棧中元素以成對存在的

if( mid < top)

} }}//輸出

void paintquicksort(datatype digit, const int lengthofdigit)

快速排序實現(遞迴 非遞迴)

首先是劃分演算法,假設每次都以第乙個元素作為樞軸值,進行一趟劃分 int partition int a,int low,int high a low pivot 將樞軸值元素置於最終位置 return low 第乙個while迴圈裡的 還可以採用如下形式 while low high a high...

快速排序非遞迴實現

再來談談快速排序,遞迴實現與非遞迴實現。遞迴實現是基本的排序 非遞迴實現需要用stack來儲存 low,high 的排序對,一部分一部分的排序。直接上程式了 標頭檔案 quick test.h include include include include include include typed...

快速排序的非遞迴實現

首先說明一下快速排序是對氣泡排序的改進。為什麼這麼說呢?想一下氣泡排序,它把序列分成了兩部分,前半部分無序,後半部分公升序排列,並且後半部分的數都大於前半部的數。由此可得到快速排序和氣泡排序的一些共同點 都要經歷n趟排序 每趟排序要經歷o n 次比較 都是後半部分元素比前半部大 而不同之處就在於氣泡...