快速排序(Quick Sort)是一種常見且高效的排序算法,屬於比較排序的一種。
它的基本概念是選擇一個基準元素(pivot),將數列劃分為兩個子數列,
其中一個子數列中的元素都小於基準元素,另一個子數列中的元素都大於基準元素。
然後對兩個子數列分別遞迴地應用快速排序,直到排序完成。
Lomuto partition scheme 則是快速排序的一種分區方案,其過程如下:
- 選擇最右邊的元素作為基準點(pivot)。
- 初始化一個指標i,指向數列的起始位置。
- 遍歷數列,從起始位置到倒數第二個元素(n-1):
- 如果當前元素小於等於基準點,則將該元素與指標i所指的位置的元素進行交換,
並將指標i向後移動一位。
- 如果當前元素小於等於基準點,則將該元素與指標i所指的位置的元素進行交換,
- 將基準點與指標i所指的位置的元素進行交換,這樣基準點左邊的元素都小於等於基準點,
右邊的元素都大於基準點。 - 遞迴應用快速排序到基準點左右兩個子數列上,直到排序完成。
其時間複雜度:
- 平均情況下:O(n log n)
- 最壞情況下(當數列已經有序):O(n^2)
- 最好情況下(當數列元素分布較為均勻):O(n log n)
快速排序的時間複雜度取決於基準點的選擇以及數列的分割情況。
在平均情況下,快速排序具有很高的效率,但在最壞情況下,快速排序的效率會下降到O(n^2)。
- Example - Lomuto Quick Sort (C++)