快速排序演算法是對包含n個數的輸入陣列進行排序,演算法的期望時間為θ(nlgn),最壞的執行時間為θ(n2
),並且其使用就地排序。
舉個例子 對陣列a[p..r]排序可分成以下三個步驟:分解:陣列a[p..r]劃分成a[p..q-1]和a[q+1..r],使得a[p..q-1]中的每個元素都小於等於a[q],而且小於等於a[q+1..r]中的元素;
解決:通過遞迴呼叫快速排序,對陣列a[p..q-1]和a[q+1..r]進行排序;
合併:因為兩個陣列時就地排序,可以將它們直接合併
下面是快速排序的過程
quicksort(a, p, r)if p < r
then q ←
partition(a, p, r)
quicksort(a, p, q-1
) quicksort(a, q+1, r)
細化quicksort(a, p, r)
partition(a, p, r)x ←a[r]
i ← p-1
for j ← p to r-1do
if a[j] <=x
then i ← i+1exchange a[i] ↔
a[j]
exchange a[i+1] ↔a[r]
return i+1
官方經典快速排序演算法
#include#include
#define num_items 100
void quicksort(int numbers, int
array_size);
void q_sort(int numbers, int left, int
right);
intnumbers[num_items];
intmain()
void quicksort(int numbers, int
array_size)
void q_sort(int numbers, int left, int
right)
while ((numbers[left] <= pivot) && (left left++;
if (left !=right)
} numbers[left] =pivot;
pivot =left;
left =l_hold;
right =r_hold;
if (left q_sort(numbers, left, pivot-1
);
if (right >pivot)
q_sort(numbers, pivot+1
, right);
}
演算法學習 快速排序
快速排序 分治演算法 const int n 1e6 10 int a n a 待排序陣列,l 排序陣列的起始下標,r 排序陣列的結束下標 void quick sort int a,int l,int r 遞迴的終止條件 int x a l 選取排序的比較物件 int i l 1 設定排序的左指標...
演算法學習 快速排序
1 基本思想 取待排序陣列第乙個數作為參照數,建立left和right陣列,left儲存小於參照數的陣列集合,right儲存大於參照數的陣列集合,然後分別對left和right進行遞迴呼叫排序。2 舉例 11,2,3,43,23,5,6,9,10 取任意的乙個數為基準數 temp arr 0 遍歷陣...
排序演算法學習 快速排序
快速排序 作為氣泡排序的一種改進 通過設定乙個標誌值 通常為陣列第乙個元素pivot 一次快排將陣列分成兩個部分,一部分 公升序 前一部分 小於標誌值pivot,另一部分大於標誌值 公升序 後面部分 各部分內部可以是 通常也是 無序的。通過遞迴地呼叫這樣的排序,使得最終陣列所有的元素有序。一次具體的...