wiki搬運,排序算法

穩定的排序[編輯]

  • 冒泡排序(bubble sort)— {\displaystyle O(n^{2})}O(n^{2})
  • 插入排序(insertion sort)—{\displaystyle O(n^{2})}O(n^{2})
  • 雞尾酒排序(cocktail sort)—{\displaystyle O(n^{2})}O(n^{2})
  • 桶排序(bucket sort)—{\displaystyle O(n)}O(n);須要{\displaystyle O(k)}O(k)額外空間
  • 計數排序(counting sort)—{\displaystyle O(n+k)}O(n+k);須要{\displaystyle O(n+k)}O(n+k)額外空間
  • 歸併排序(merge sort)—{\displaystyle O(n\log n)}O(n\log n);須要{\displaystyle O(n)}O(n)額外空間
  • 原地歸併排序— {\displaystyle O(n\log ^{2}n)}O(n\log^2 n)若是使用最佳的如今版本
  • 二叉排序樹排序(binary tree sort)— {\displaystyle O(n\log n)}O(n\log n)指望時間;{\displaystyle O(n^{2})}O(n^{2})最壞時間;須要{\displaystyle O(n)}O(n)額外空間
  • 鴿巢排序(pigeonhole sort)—{\displaystyle O(n+k)}O(n+k);須要{\displaystyle O(k)}O(k)額外空間
  • 基數排序(radix sort)—{\displaystyle O(nk)}{\displaystyle O(nk)};須要{\displaystyle O(n)}O(n)額外空間
  • 侏儒排序(gnome sort)— {\displaystyle O(n^{2})}O(n^{2})
  • 圖書館排序(library sort)— {\displaystyle O(n\log n)}O(n\log n)指望時間;{\displaystyle O(n^{2})}O(n^{2})最壞時間;須要{\displaystyle (1+\varepsilon )n}{\displaystyle (1+\varepsilon )n}額外空間
  • 塊排序(block sort)— {\displaystyle O(n\log n)}O(n\log n)

不穩定的排序[編輯]

  • 選擇排序(selection sort)—{\displaystyle O(n^{2})}O(n^{2})
  • 希爾排序(shell sort)—{\displaystyle O(n\log ^{2}n)}O(n\log^2 n)若是使用最佳的如今版本
  • 克洛弗排序(Clover sort)—{\displaystyle O(n)}O(n)指望時間,{\displaystyle O(n^{2})}O(n^{2})最壞狀況
  • 梳排序— {\displaystyle O(n\log n)}O(n\log n)
  • 堆排序(heap sort)—{\displaystyle O(n\log n)}O(n\log n)
  • 平滑排序(smooth sort)— {\displaystyle O(n\log n)}O(n\log n)
  • 快速排序(quick sort)—{\displaystyle O(n\log n)}O(n\log n)指望時間,{\displaystyle O(n^{2})}O(n^{2})最壞狀況;對於大的、隨機數列表通常相信是最快的已知排序
  • 內省排序(introsort)—{\displaystyle O(n\log n)}O(n\log n)
  • 耐心排序(patience sort)—{\displaystyle O(n\log n+k)}{\displaystyle O(n\log n+k)}最壞狀況時間,須要額外的{\displaystyle O(n+k)}O(n+k)空間,也須要找到最長的遞增子序列(longest increasing subsequence)

不實用的排序[編輯]

  • Bogo排序— {\displaystyle O(n\times n!)}{\displaystyle O(n\times n!)},最壞的狀況下指望時間爲無窮。
  • Stupid排序{\displaystyle O(n^{3})}O(n^{3});遞歸版本須要{\displaystyle O(n^{2})}O(n^{2})額外存儲器
  • 珠排序(bead sort)— {\displaystyle O(n)}O(n) 或 {\displaystyle O({\sqrt {n}})}O({\sqrt  {n}}),但須要特別的硬件
  • 煎餅排序{\displaystyle O(n)}O(n),但須要特別的硬件
  • 臭皮匠排序(stooge sort)算法簡單,但須要約{\displaystyle n^{2.7}}{\displaystyle n^{2.7}}的時間

 

名稱 數據對象 穩定性 時間複雜度 額外空間複雜度 描述
平均 最壞
冒泡排序 數組 {\displaystyle O(n^{2})}O(n^{2}) {\displaystyle O(1)}O(1) (無序區,有序區)。
從無序區透過交換找出最大元素放到有序區前端。
選擇排序 數組 {\displaystyle O(n^{2})}O(n^{2}) {\displaystyle O(1)}O(1) (有序區,無序區)。
在無序區裏找一個最小的元素跟在有序區的後面。對數組:比較得多,換得少。
鏈表
插入排序 數組、鏈表 {\displaystyle O(n^{2})}O(n^{2}) {\displaystyle O(1)}O(1) (有序區,無序區)。
把無序區的第一個元素插入到有序區的合適的位置。對數組:比較得少,換得多。
堆排序 數組 {\displaystyle O(n\log n)}O(n\log n) {\displaystyle O(1)}O(1) (最大堆,有序區)。
從堆頂把根卸出來放在有序區以前,再恢復堆。
歸併排序 數組 {\displaystyle O(n\log ^{2}n)}{\displaystyle O(n\log ^{2}n)} {\displaystyle O(1)}{\displaystyle O(1)} 把數據分爲兩段,從兩段中逐個選最小的元素移入新數據段的末尾。
可從上到下或從下到上進行。
{\displaystyle O(n\log n)}O(n\log n) {\displaystyle O(n)+O(\log n)}O(n)+O(\log n)
若是不是從下到上
鏈表 {\displaystyle O(1)}O(1)
快速排序 數組 {\displaystyle O(n\log n)}O(n\log n) {\displaystyle O(n^{2})}O(n^{2}) {\displaystyle O(\log n)}O(\log n) (小數,基準元素,大數)。 
在區間中隨機挑選一個元素做基準,將小於基準的元素放在基準以前,大於基準的元素放在基準以後,再分別對小數區與大數區進行排序。
希爾排序 數組 {\displaystyle O(n\log ^{2}n)}O(n\log ^{2}n) {\displaystyle O(n^{2})}O(n^{2}) {\displaystyle O(1)}O(1) 每一輪按照事先決定的間隔進行插入排序,間隔會依次縮小,最後一次必定要是1。
 
計數排序 數組、鏈表 {\displaystyle O(n+m)}O(n+m) {\displaystyle O(n+m)}O(n+m) 統計小於等於該元素值的元素的個數i,因而該元素就放在目標數組的索引i位(i≥0)。
桶排序 數組、鏈表 {\displaystyle O(n)}O(n) {\displaystyle O(m)}O(m) 將值爲i的元素放入i號桶,最後依次把桶裏的元素倒出來。
基數排序 數組、鏈表 {\displaystyle O(k\times n)}O(k\times n) {\displaystyle O(n^{2})}O(n^{2})   一種多關鍵字的排序算法,可用桶排序實現。
    • 均按從小到大排列
    • k表明數值中的"數字"個數
    • n表明數據規模
    • m表明數據的最大值減最小值
相關文章
相關標籤/搜索