快速排序(C)

2022-06-13 10:12:10 字數 1277 閱讀 3063

快速排序演算法是基於分治策略的一種演算法,其基本思想是取乙個基準值,分別從序列的兩端掃瞄資料,將初始序列劃分成兩份,比基準大的分到右邊,小於等於基準的分到左邊;然後對左右兩邊的區間再次獨立劃分,採用遞迴的方式,重複劃分排序,直到劃分區間裡只剩乙個數。

演算法描述

假設:對於集合 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.根據分割位置,分別遞迴...