非遞迴版本的快速排序

2021-07-15 09:43:37 字數 421 閱讀 4254

快速排序:每次選擇乙個樞軸,比樞軸大的元素放在陣列的右半部分,比樞軸小的元素放在陣列的左半部分。然後遞迴的進入陣列的左右兩半部分。如果要用非遞迴來實現,我們需要用棧來儲存陣列左右兩半部分的邊界。**如下:

int partition(vector&nums, int start, int last)

while (start < last && nums[last] >= val)

if (start < last)

}nums[start] = val;

return start;

}void quick_sort(vector&nums, int start, int last)

//當前陣列的右半部分邊界入棧

if (pos + 1 < last)

}}}

快速排序的遞迴非遞迴

快速排序 即一趟快速排序的過程,返回基準。基準 平分資料段 時間複雜度 好情況 無序的資料 o nlog2n 壞 有序 o n2 空間複雜度 o log2n 演算法穩定性 不穩定 原理 採用分治思想,在待排序的序列中選取乙個值作為乙個基準值,按照這個基準值得大小將這個序列劃分成兩個子串行,基準值會在...

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

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

快速排序遞迴與非遞迴

快速排序思想 以公升序為例 在要排序的序列中選乙個基準,使它左邊的數都比它小,右邊的數都比它大。具體步驟 1 區間選乙個key,可以選區間右邊界的那個數 2 讓begin從區間左邊界開始往後找大於key的數,找到後停下來,再讓end從區間右邊界 1開始往前找小於key的數,找到後讓它和begin找的...