演算法描述:
快速排序是由東尼·霍爾所發展的一種排序演算法。
在平均狀況下,排序 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 ...