QuickSort 快速排序
快速排序 - QuickSort
最壞情況是 O(n^2) , 平均是 O(n*logn) 但是儘管 堆排序的執行時間 是保證在 O(n*logn), 但是在實際中快速排序的執行時間往往是快於堆排序的。
快速排序也是in-place的排序。
原理:
快速排序 的原理就是選定一個點作為軸心點 - pivot, 初始是從 陣列的第一個元素開始,一直到 倒數第二個元素,挨個與pivot的值進行比較,將小於或者等於pivot的值,換到當前走過的並且小於等於pivot的最近位置的下一位 ( 預設我們的開始索引位-1). 當到達倒數第二個元素後, 我們需要將 我們走過的離pivot最近的並且值小於等於pivot的元素的下一位 q-position 與pivot進行交換. 這個過程被稱為partition . 之後進行遞迴操作 - quicksort (Array, start, q-position - 1); quicksort(Array, q-position + 1, end)
partition 的步驟
例如: 2, 8, 7, 1, 3, 5, 6, 4. (pivot為4 - 我的程式中預設初始pivot為陣列中最後一個值)
將小於等於4的數進行交換,從2開始,2小於4,當前我們走過的離4最近的值的下一位與2進行交換 - (因為預設的索引為-1, 下一位的索引就是0 對應的值就是2),當前走到2,所以2不變, 繼續走
8,7 都不小於4, 當我們來到值1 的時候,滿足條件,將1 和 當前我們走過的,並且小於等於4的值的下一位進行交換,也就是8. 將 8 和 1交換
交換之後的陣列位 2, 1, 7, 8, 3, 5, 6, 4. 重複 直到倒數第二個元素, 得到 2, 1, 3, 8, 7, 5, 6, 4
然後,需要將我們走過的離pivot最近並且小於等於pivot的元素的下一位與pivot進行交換得 2, 1, 3, 4, 7, 5, 6, 8
程式碼實現的連結GitHub
有問題歡迎指出!
相關文章
- 快速排序(Quicksort)的Javascript實現排序UIJavaScript
- 快速排序(quicksort)演算法實現排序UI演算法
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- POJ-2299 Ultra-QuickSort-分治法排序求交換速度UI排序
- 排序之快速排序排序
- 排序:氣泡排序&快速排序排序
- 快速排序排序
- 快速排序&&歸併排序排序
- 快速排序快速入門排序
- 四、歸併排序 && 快速排序排序
- 選擇排序和快速排序排序
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 排序演算法-快速排序排序演算法
- 排序演算法——快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 快速排序法排序
- java 快速排序Java排序
- 快速排序javaScript排序JavaScript
- js 快速排序JS排序
- javascript 快速排序JavaScript排序
- 分治—快速排序排序
- 快速排序-java排序Java
- [JAVA]快速排序Java排序
- 快速排序 java排序Java
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法之 '快速排序'排序演算法
- #排序演算法#【4】快速排序排序演算法
- 《排序演算法》——快速排序(Java)排序演算法Java
- 遞迴-*快速排序遞迴排序
- 圖解快速排序圖解排序
- 三種快速排序排序
- 快速排序C++排序C++
- 簡單快速排序排序
- 【筆記】快速排序筆記排序
- 快速排序(Quick Sort)排序UI
- 冒泡和快速排序排序
- 重溫快速排序排序