Quick Sort
做法
- Quick Sort 與 Merge Sort 雖然利用同樣的概念,但是作法上差異很大,它會先從陣列中選擇一個「樞紐」(pivot),然後將所有小於樞紐的值都移到它的左邊、將所有大於樞紐的值都移到它的右邊。移動的過程我們並沒有去做排序,我們只是先將它們移到某一邊。ps. 結束時,只有 pivot 會在它最後正確的位置上(也就是只有樞紐是在排好序的位置)。
- 當樞紐完成以後,我們對左半部分再次進行同樣的處理(找到 pivot、移動位置),再處理右半部分。
時間複雜度分析:
- 最壞情況(Worst Case): O(n²)
- 當基準值總是選到最大或最小元素時
- 當數組已經排序或逆序時
- 分割非常不平衡時
- 最好情況(Best Case): O(n log n)
- 當每次分割都能將數組平均分成兩半時
- 遞迴樹的深度為 log n
- 每層需要 O(n) 的操作
- 平均情況(Average Case): O(n log n)
- 在隨機數據下,通常能達到這個效率
- 這也是實際應用中最常見的情況
1 | public class QuickSort |
本部落格所有文章除特別聲明外,均採用CC BY-NC-SA 4.0 授權協議。轉載請註明來源 YouChen's Blog!