1. 程式人生 > >JavaScript實現標準快速排序

JavaScript實現標準快速排序

快速排序是分治策略的經典實現,分治的策略如下:

  1. 分解(Divide)步驟:將問題劃分未一些子問題,子問題的形式與原問題一樣,只是規模更小

  2. 解決(Conquer)步驟:遞迴地求解出子問題。如果子問題的規模足夠小,則停止遞迴,直接求解

  3. 合併(Combine)步驟:將子問題的解組合成原問題的解

    快速排序函式,我們需要將排序問題劃分為一些子問題進行排序,然後通過遞迴求解,我們的終止條件就是,當array.length > 1不再生效時返回陣列

    function quickSort(array) {
        return quick(array, 0, array.
    length - 1); }; function quick(array, left, right) { let index; if (array.length > 1) { index = partition(array, left, right); if (left < index - 1) { quick(array, left, index - 1); } if (index < right) { quick(array, index, right); } }
    return array; } // 劃分操作函式 function partition(array, left, right) { // 利用index取中間值可以大大降低演算法的時間複雜度 const pivot = array[Math.floor((right + left) / 2)]; let i = left; let j = right; while (i <= j) { while (compare(array[i], pivot) === -1) { i++; } while (
    compare(array[j], pivot) === 1) { j--; } if (i <= j) { swap(array, i, j); i++; j--; } } return i; } // 比較函式 function compare(a, b) { if (a === b) { return 0; } return a < b ? -1 : 1; }