如下具体算法中描述的均是升序排序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; }