Skip to content

RC-Dev-Tech/algorithm-quick-sort-hoare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

快速排序 - 霍爾分區方案(Hoare partition scheme)

理論請自行找,網路上有很多相關的文章,這邊只關注於範例實作的部分.

目錄


簡介

快速排序(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的實現較為複雜,並且在某些特定情況下可能導致不均勻的分割,因此在實際應用中需要謹慎考慮使用。

示意圖:

圖片來源:iThome鐵人賽(Frank) - 演算法 快速排序法 Quick Sort


實作範例:


參考資料



About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages