排序 快速排序(C )

2021-07-10 15:16:59 字數 1105 閱讀 2823

1、演算法描述:

1.1 設當前參加排序的陣列為array[0..n-1]

選擇乙個元素(通常稱該元素為基準元素)作為基準元素;

將小於或者等於基準元素的所有元素都移到基準元素的左邊;

把大於或者等於基準元素的所有元素都移到分界元素的右邊;

執行完(2),(3)步驟後,基準元素左邊元素序列,基準元素,基準元素右邊元素序列正好完成排序;

然後在對基準元素左邊元素序列和基準元素右邊元素序列再次執行(1),(2),(3)步驟;

直到左邊序列和右邊序列長度等於1為止,這樣排序就完成了。

1.2 分界元素可以選取

待排序陣列序列的第乙個元素;

待排序陣列序列的最後乙個元素;

待排序陣列序列位置居中的元素

(本次**例項選擇第乙個元素作為基準元素)
原理如圖所示:

說明:排序過程中需要設定兩個排序變數i, j. 

i的初始值設定為排序序列中第乙個元素, j的初始值設定為排序序列的最後乙個元素位置;令x = a[i];

當 while ( i當while ( ix ) 成立時,則j--;如果i執行將基準元素賦給a[i]的操作:a[i] = x;

然後遞迴進行基準元素左邊序列和基準元素右邊序列的(1)(2)(3)(4);直到整個序列排序結束。

**例項:

#include using namespace std;

int quick_sort(int a, int left, int right)

{ if (leftx )

j--;

if ( i

執行結果:

快速排序的時間複雜度為:o(nlgn)。

排序 快速排序(C )

如果看不懂這些乾巴巴的理 字,那就先不用看了,下面 中有詳細的注釋,大家可以先跟著 走幾遍,回過頭來再看這些文字描述,總之 紙上得來終覺淺,絕知此事要躬行。排序演算法哪家強,從實際應用的角度上將,快排表現很好。很自然地,人們會覺得短陣列比長陣列更好處理,因此可能會想到將原始陣列分為若干各子部分然後分...

排序演算法 快速排序 C

單向掃瞄就地重排 int partitation 1way int array,int nidxleft,int nidxright return nidxsmall 雙向掃瞄就地重排 int partitation 2way int array,int nidxleft,int nidxright...

排序 C 快速排序模板

無注釋的 include using namespace std const int n 100005 int a n void quicksort int q,int l,int r int index q l r 1 int i l 1,j r 1 while i j while q i ind...