快速排序(Quick Sort)是一種常見且高效的排序算法,屬於比較排序的一種。
它的基本概念是選擇一個基準元素(pivot),將數列劃分為兩個子數列,
其中一個子數列中的元素都小於基準元素,另一個子數列中的元素都大於基準元素。
然後對兩個子數列分別遞迴地應用快速排序,直到排序完成。
Hoare partition scheme 則是快速排序的一種分區方案,其過程如下:
- 選擇數列中間的元素作為基準點(pivot)。
- 初始化兩個指標,一個指向數列的起始位置(low),另一個指向數列的末尾位置(high)。
- 重複以下步驟直到兩個指標相遇:
- 從左側開始,尋找第一個大於等於基準點的元素。
- 從右側開始,尋找第一個小於等於基準點的元素。
- 如果兩個指標尚未相遇,則交換這兩個元素。
- 當兩個指標相遇時,將基準點與這個位置的元素進行交換,這樣基準點左邊的元素都小於等於基準點,右邊的元素都大於等於基準點。
- 遞迴應用快速排序到基準點左右兩個子數列上,直到排序完成。
其時間複雜度:
- 平均情況下:O(n log n)
- 最壞情況下(當數列已經有序):O(n^2)
- 最好情況下(當數列元素分布較為均勻):O(n log n)
Hoare partition scheme在某些情況下比Lomuto partition scheme的效率更高,因為它在分區過程中避免了不必要的元素交換。
然而,由於Hoare partition scheme的實現較為複雜,並且在某些特定情況下可能導致不均勻的分割,因此在實際應用中需要謹慎考慮使用。
- Example - Hoare Quick Sort (C++)