演算法 · 9 個細項
Sorting排序
排序是最常被呼叫的演算法,也是理解分治、穩定性、下界證明的最佳教材。學完你會知道語言內建的 sort 為什麼那樣設計,以及什麼時候可以突破 n log n。
為什麼要學 Sorting
現實中的應用細項
9 篇#演算法複雜度難度狀態
01Bubble Sort 氣泡排序相鄰交換,最直覺但最慢用在:教學用,理解「相鄰交換」與穩定性O(n²)空間 O(1)可學習02Selection Sort 選擇排序每輪選最小的放到前面用在:交換次數最少,寫入昂貴的場合O(n²)空間 O(1)可學習03Insertion Sort 插入排序像整理撲克牌,近乎有序時 O(n)用在:小陣列或幾乎有序的資料,內建排序在小段落會切換用它O(n²)空間 O(1)可學習04Merge Sort 合併排序切半、各自排、合併,穩定用在:外部排序大檔案、鏈結串列排序、逆序對O(n log n)空間 O(n)可學習05Quick Sort 快速排序選 pivot 分兩邊,平均最快用在:大多數語言內建排序的基礎,Quick Select 找第 k 大平均 O(n log n)空間 O(log n)可學習06Heap Sort 堆積排序先 heapify 再逐個取出,原地用在:記憶體受限又要保證 n log n 的場合O(n log n)空間 O(1)可學習07Counting Sort 計數排序數每個值出現幾次,不比較用在:範圍小的整數,例如成績、年齡分布O(n+k)空間 O(n+k)可學習08Radix / Bucket Sort 基數與桶排序按位數或按區間分桶用在:固定長度的整數或字串,例如電話號碼O(d·n)空間 O(n+k)可學習09Sorting Lower Bound 比較排序下界用決策樹證明比較排序至少 Ω(n log n)用在:知道什麼時候不可能更快Ω(n log n)空間 —可學習