如下具體算法中描述的均是升序排序html
複雜度分析請結合具體算法(點擊排序方式可到對應博客)git
排序方式 | 平均時間複雜度 | 最優時間複雜度 | 最差時間複雜度 | 空間複雜度 | 穩定性 |
---|---|---|---|---|---|
冒泡排序 | O(n2) | O(n2) | O(n2) | O(1) | 穩定 |
快速排序 | O(nlogn) | O(nlogn) | O(n2) | O(logn) | 不穩定 |
直接插入排序 | O(n2) | O(n) | O(n2) | O(1) | 穩定 |
希爾排序 | *O(n1.3) | *O(n) | *O(n2) | O(1) | 不穩定 |
簡單選擇排序 | O(n2) | O(n2) | O(n2) | O(1) | 不穩定 |
堆排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(1) | 不穩定 |
二路歸併排序 | O(nlogn) | O(nlogn) | O(nlogn) | O(n) | 穩定 |
計數排序 | O(n+m) | O(n+m) | O(n+m) | O(n+m) | 穩定 |
桶排序 | O(n + n(logn - logk)) | O(n) | O(n2) | O(n+k) | 穩定 |
基數排序 | O(d(n+r)) | O(d(n+r)) | O(d(n+r)) | O(n+r) | 穩定 |
公用函數算法
// 交換array[i]和array[j] function Swap(array, i, j) { var temp = array[i]; array[i] = array[j]; array[j] = temp; } // 不需額外空間的兩數交換 // 此處只是記錄,下面並無用過這個函數 function Swap_v2(a, b) { a = a + b; b = a - b; a = a - b; } // 返回數組元素中的最高位數 function GetHighDigitTemp(array, radix) { var len = array.length; var max = array[0]; for (var i = 1; i < len; i++) { if (array[i] > max) { max = array[i]; } } var digit = 1; for (; max >= radix; digit++) { max /= radix; } return digit; }