1. 程式人生 > >八大排序演算法詳解——快速排序

八大排序演算法詳解——快速排序

基本思想

設當前待排序的陣列無序區為R[low..high],利用分治法可將快速排序的基本思想描述為:

  • 分解:

在R[low..high]中任選一個記錄作為基準(Pivot),以此基準將當前無序區劃分為左、右兩個較小的子區間R[low..pivotpos-1)和R[pivotpos+1..high],並使左邊子區間中所有記錄的關鍵字均小於等於基準記錄(不妨記為pivot)的關鍵字pivot.key,右邊的子區間中所有記錄的關鍵字均大於等於pivot.key,而基準記錄pivot則位於正確的位置(pivotpos)上,它無需參加後續的排序。
注意:劃分的關鍵是要求出基準記錄所在的位置pivotpos,劃分的結果可以簡單地表示為(注意pivot=R[pivotpos]):
R[low..pivotpos-1].keys ≤ R[pivotpos].key ≤ R[pivotpos+1..high].keys
其中low≤pivotpos≤high。

  • 求解:

通過遞迴呼叫快速排序對左、右子區間R[low..pivotpos-1]和R[pivotpos+1..high] 快速排序。

  • 組合:

因為當“求解”步驟中的兩個遞迴呼叫結束時,其左、右兩個子區間已有序。對快速排序而言, “組合”步驟不需要做什麼,可看作是空操作。

演算法實現

快速排序演算法,Java實現,程式碼如下所示: