另一隻快排寫法

function quickSort(arr) {
    // 交換元素位置
    function swap(arr, m, n) {
        let temp = arr[m];
        arr[m] = arr[n];
        arr[n] = temp;
    }
    // 數組分區,左小右大
    function partition(arr, head, tail) {
        let storeIndex = head;
        let pivot = arr[tail]; // 直接選最右邊的元素爲基準元素
        for (let i = head; i < tail; i++) {
            if (arr[i] < pivot) {
                swap(arr, storeIndex, i);
                storeIndex++; // 交換位置後,storeIndex 自增 1,代表下一個可能要交換的位置
            }
        }
        swap(arr, tail, storeIndex); // 將基準元素放置到最後的正確位置上
        return storeIndex;
    }

    function sort(arr, head, tail) {
        if (head > tail) {
            return;
        }
        let storeIndex = partition(arr, head, tail);
        sort(arr, head, storeIndex - 1);
        sort(arr, storeIndex + 1, tail);
    }
    sort(arr, 0, arr.length - 1);
    return arr;
}

let arr1 = [1, 4, 5, 2, 7, 0]
console.log(quickSort(arr1))

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章