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);直到整個序列排序結束。
**例項:
快速排序的時間複雜度為:o(nlgn)。#include using namespace std;
int quick_sort(int a, int left, int right)
{ if (leftx )
j--;
if ( i
執行結果:
排序 快速排序(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...