資料結構 排序演算法 快速排序

2021-09-30 14:27:39 字數 835 閱讀 6820

演算法描述:

快速排序是由東尼·霍爾所發展的一種排序演算法。

在平均狀況下,排序 n 個專案要ο(n log n)次比較。

在最壞狀況下則需要ο(n2)次比較,但這種狀況並不常見。

事實上,快速排序通常明顯比其他ο(n log n) 演算法更快,因為它的內部迴圈(inner loop)可以在大部分的架構上很有效率地被實現出來,且在大部分真實世界的資料,可以決定設計的選擇,減少所需時間的二次方項之可能性。

演算法步驟:

1、從數列中挑出乙個元素,稱為 「基準」(pivot)。

2、重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面(相同的數可以到任一邊)。在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽(partition)操作。

3、遞迴地(recursive)把小於基準值元素的子數列和大於基準值元素的子數列排序。

注:對於快排演算法來說,其也有改進優化的空間,比如在選取第乙個元素作為主元時,該主元的如何選取。對於快速排序演算法的改進主要集中在三個方面:

① 選取乙個更好的中軸值;

② 根據產生的子分割槽大小調整演算法;

③不同的劃分分割槽的方法。

int partition(int arr, int

left, int

right)

} swap(arr[i + 1], arr[right]);

return i + 1;

} void quick_sort(int arr, int

left, int

right)

}

資料結構 快速排序演算法

一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由前開始向後搜尋 i ...

資料結構排序演算法之快速排序

快速排序 includeusing namespace std void swap int arr,int i,int j void quicksort int arr,int left,int right arr i temp quicksort arr,left,i 1 quicksort ar...

演算法和資料結構 排序 快速排序

交換位置 交換順序表l中子表的記錄,使樞軸記錄到位,並返回其所在位置 此時在它之前 後 的記錄均不大 小 於它。int partition sqlist l,int low,int high return low 返回樞軸所在位置 對順序表l中的子串行l r low.high 作快速排序 void ...