快速排序演算法是基於分治策略的一種演算法,其基本思想是取乙個基準值,分別從序列的兩端掃瞄資料,將初始序列劃分成兩份,比基準大的分到右邊,小於等於基準的分到左邊;然後對左右兩邊的區間再次獨立劃分,採用遞迴的方式,重複劃分排序,直到劃分區間裡只剩乙個數。
演算法描述
假設:對於集合 n【len】進行快速排序,起始位置 low = 0, 末尾 high = len - 1
第一次排序:從n中取基準值 temp = n【起始位置】儲存,然後從首尾兩端掃瞄資料,值與temp作比較,大於基準移到temp右邊,小於等於基準移到temp左邊
左右分區排序:執行第二次排序時,數值 6 左右分區分別排序,重複第一次的排序過程,結果如下
遞迴實現:如上面兩個步驟,可以使用遞迴來實現整個序列的排序,遞迴呼叫第一次排序的過程,取基準、劃分,直到所有子分割槽首尾相遇,完成排序。
**實現
void
quick_sort
(int n,
int start,
int end)
n[i]
= n[j]
;// n[j]比temp小的放到temp前面
while
(i < j && n[i]
<= temp)
n[j]
= n[i]
;/ n[i]比temp大的放到temp後面
} n[i]
= temp;
// 當 i == j 時,基準歸位到 i 位置,一輪快排結束
/* 開始遞迴快排基準左右的序列 */
quick_sort
(n, start, i)
;quick_sort
(n, i +
1, end);}
return
;}
執行結果
輸入資料 n = ,執行過程如下:
如圖所示,對於 10 個元素,一共比較劃分了 9 次,完成排序;即:對於n個元素,快排需要比較劃分 n - 1 次。
演算法複雜度
時間複雜度
空間複雜度:o(log2n),主要是遞迴演算法對於棧空間的消耗
基準取值
本文基準值取首位置元素,也可取中間位置元素值或隨機值作為基準值,但是相應的基準值的替換位置需要作變化。
排序 快速排序(C )
1 演算法描述 1.1 設當前參加排序的陣列為array 0.n 1 選擇乙個元素 通常稱該元素為基準元素 作為基準元素 將小於或者等於基準元素的所有元素都移到基準元素的左邊 把大於或者等於基準元素的所有元素都移到分界元素的右邊 執行完 2 3 步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元...
排序 快速排序(C )
如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...
快速排序 c
快速排序應該是目前最快,也是最常用的一種排序演算法。它將乙個集合劃分成兩個子集合,然後繼續遞迴來完成最終排序。具體做法 1.選取集合最右端的元素作為乙個參照物,稱之為 樞紐 pivot 2.開始計算分割位置。在計算時,進行元素交換,確保左側元素都小於樞紐,而右側都大於樞紐。3.根據分割位置,分別遞迴...