總結:關於排序算法

如下具體算法中描述的均是升序排序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) 穩定

注:n爲待排序列長度,m爲待排序列取值範圍大小,k爲桶數量,d爲數組最高位數,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;
}
相關文章
相關標籤/搜索