使用棧實現快速演算法的非遞迴實現

2021-06-21 10:06:04 字數 735 閱讀 8268

先說明一下快速排序是對氣泡排序的改進。為什麼這麼說呢?想一下氣泡排序,它把序列分成了兩部分,前半部分無序,後半部分公升序排列,並且後半部分的數都大於前半部的數。

由此可得到快速排序和氣泡排序的一些共同點:

都要經歷n趟排序

每趟排序要經歷o(n)次比較

都是後半部分元素比前半部大

而不同之處就在於氣泡排序的交換操作發生相鄰的元素之間,即一趟排序可以要經過多次交換操作;快速排序的交換操作發生在間隔比較遠的兩個元素之間,一趟排序要經過交換操作次數會少一些。

#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(lowvoid quicksort2(vector&vec,int low,int high){

stackst;

if(lowvec;

for(int i=0;i

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

快速排序非遞迴基本思想 將每一段的頭和尾放在棧中,在逐步出棧。首先先建乙個棧或者呼叫stl 標準模板庫 中 棧函式。在標頭檔案中。include include include using namespace std define size 20 typedef int datatype typed...

快速排序演算法實現(遞迴實現 棧實現)

基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...

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

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