http://www.javashuo.com/article/p-hmcedzbw-r.html算法
冒泡排序(Bubble Sort)數組
- 比較相鄰的元素。若是第一個比第二個大,就交換它們兩個,直到最後
- 算法分析
- 最佳狀況:T(n) = O(n)
- 這裏注意,若是發現沒有交換,證實已是排好序了
- 第一次比較就沒有出現交換,因此是 O(n)
- 最差狀況:T(n) = O(n2)
- 平均狀況:T(n) = O(n2)
選擇排序(Selection Sort)ui
- 第一個分別與後面的進行比較,每次把最大(最小)的投出來
- 算法分析
- 最佳狀況:T(n) = O(n2)
- 最差狀況:T(n) = O(n2)
- 平均狀況:T(n) = O(n2)
插入排序(Insertion Sort).net
- 每次拿出一個與前面挨着的比較,發現第一個比本身大(小)的插入,前面的序列都是有序序列
- 算法分析
- 最佳狀況:T(n) = O(n)
- 最壞狀況:T(n) = O(n2)
- 平均狀況:T(n) = O(n2)
希爾排序(Shell Sort)3d
- 改進插入排序
- 「縮小增量排序」或者「遞減增量排序」
- 算法分析
- 最佳狀況:T(n) = O(nlog2 n)
- 最壞狀況:T(n) = O(nlog2 n)
- 平均狀況:T(n) =O(nlog2n)
- 時間複雜度:
- 基於插入排序的兩點性質而來:
- 對一個「幾乎」已經排好序的無序序列,插入排序的效率是很高的,能夠達到線性排序的效率
歸併排序(Merge Sort)blog
- 把長度爲n的輸入序列分紅兩個長度爲n/2的子序列;
- 對這兩個子序列分別採用歸併排序;
- 將兩個排序好的子序列合併成一個最終的排序序列。
- 算法分析
- 最佳狀況:T(n) = O(n)
- 最差狀況:T(n) = O(nlogn)
- 平均狀況:T(n) = O(nlogn)
快速排序(Quick Sort)排序
- 選擇中間數,把大雨的丟右邊,小於的丟左邊
- 算法分析
- 最佳狀況:T(n) = O(nlogn)
- 最差狀況:T(n) = O(n2)
- 平均狀況:T(n) = O(nlogn)
堆排序(Heap Sort)遞歸
-
- 算法分析
- 最佳狀況:T(n) = O(nlogn)
- 最差狀況:T(n) = O(nlogn)
- 平均狀況:T(n) = O(nlogn)
計數排序(Counting Sort)內存
- 有肯定範圍的數
- 申請最大數長度的數組
- 算法分析
- 當輸入的元素是n 個0到k之間的整數時,它的運行時間是 O(n + k)。
- 計數排序不是比較排序,排序的速度快於任何比較排序算法。
- 因爲用來計數的數組C的長度取決於待排序數組中數據的範圍
- 這使得計數排序對於數據範圍很大的數組,須要大量時間和內存。
- 最佳狀況:T(n) = O(n+k)
- 最差狀況:T(n) = O(n+k)
- 平均狀況:T(n) = O(n+k)
桶排序(Bucket Sort)get
-
桶排序是計數排序的升級版。
-
桶排序最好狀況下使用線性時間O(n),
-
最佳狀況:T(n) = O(n+k)
-
平均狀況:T(n) = O(n+k)
-
最差狀況:T(n) = O(n2)
基數排序(Radix Sort)
- 基數排序也是非比較的排序算法,對每一位進行排序,從最低位開始排序,複雜度爲O(kn),爲數組長度,k爲數組中的數的最大的位數;
- 算法分析
- 最佳狀況:T(n) = O(n * k)
- 最差狀況:T(n) = O(n * k)
- 平均狀況:T(n) = O(n * k)