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
有問題歡迎指出!
相關文章
- Sort排序專題(5)快速排序(QuickSort)(C++實現)排序UIC++
- 排序之快速排序排序
- 排序:氣泡排序&快速排序排序
- 快速排序排序
- 快速排序&&歸併排序排序
- 快速排序快速入門排序
- 排序演算法__快速排序排序演算法
- 排序演算法:快速排序排序演算法
- 選擇排序和快速排序排序
- 四、歸併排序 && 快速排序排序
- 排序演算法 - 快速排序排序演算法
- javascript 快速排序JavaScript排序
- 快速排序javaScript排序JavaScript
- js 快速排序JS排序
- 快速排序-java排序Java
- LeetCode:快速排序LeetCode排序
- 快速排序法排序
- 分治—快速排序排序
- java 快速排序Java排序
- python 快速排序Python排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法之 '快速排序'排序演算法
- 遞迴-*快速排序遞迴排序
- 快速排序 (Quick Sort)排序UI
- 快速排序C++排序C++
- 三種快速排序排序
- 8.22_快速排序排序
- 簡單快速排序排序
- 圖解快速排序圖解排序
- 堆排序和快速排序效能比較排序
- php實現 歸併排序,快速排序PHP排序
- 氣泡排序、歸併排序與快速排序比較排序
- Sorting 排序演算法: Quick Sort 快速排序排序演算法UI
- Go實現氣泡排序和快速排序Go排序
- 【C語言】氣泡排序與快速排序C語言排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- 阮一峰快速排序排序
- java實現快速排序Java排序
- Swift實現快速排序Swift排序