快速排序是由Tony Hall開發的壹種排序算法。平均來說,對n個項目進行排序需要進行ο (n log n)次比較。在最壞的情況下,需要進行ο (N2)比較,但這種情況並不常見。事實上,快速排序通常比其他ο (n log n)算法快得多,因為其內部循環可以在大多數架構上高效實現。
快速排序使用分治策略將壹個列表分成兩個子列表。
算法步驟:
1從序列中選擇壹個元素,稱為“pivot”。
2對數列重新排序,小於基準值的元素全部放在基準前面,大於基準值的元素全部放在基準後面(相同的數字可以在兩邊)。在這個分區退出後,基準位於系列的中間。這稱為分區操作。
3.遞歸排序小於參考值的元素子系列和大於參考值的元素子系列。
遞歸的底限是序列的大小為零或壹,這意味著它已經被永遠排序了。雖然壹直是遞歸的,但是這個算法總會退出,因為在每次叠代中,都會把至少壹個元素放在最後壹個位置。
算法2:堆排序算法
Heapsort是指利用堆的數據結構設計的壹種排序算法。Heap是壹種近似完整的二叉樹結構,同時滿足heap的性質:即子節點的鍵值或索引總是小於(或大於)其父節點。
堆排序的平均時間復雜度為ο (NLOGN)。
算法步驟:
創建壹個堆H[0..n-1]
交換堆的頭(最大值)和尾。
3.將堆的大小減少1,調用shift_down(0)將新數組的頂部數據調整到相應的位置。
4.重復步驟2,直到堆的大小為1。
算法3:合並排序
歸並排序(臺灣省譯:Merge sort)是壹種基於歸並運算的有效排序算法。這個算法是分而治之的壹個非常典型的應用。
算法步驟:
1.申請壹個大小為兩個排序序列之和的空間,這個空間用來存放合並後的序列。
2.設置兩個指針,初始位置分別是兩個排序序列的起始位置。
3.比較兩個指針指向的元素,選擇壹個相對較小的元素放入合並空間,將指針移動到下壹個位置。
4.重復步驟3,直到指針到達序列的末尾。
5.將另壹個序列的所有剩余元素。