SOURCE

// 单独开辟两个存储空间left和right来存储每次递归比target小和大的序列
// 每次递归直接返回left、target、right拼接后的数组
// 浪费大量存储空间,写法简单

function quickSort(array) {
    if (array.length < 2) {
        return array;
    }
    // 对比的数字
    const target = array[0];
    console.log(target)
    // 小于对比的数字
    const left = [];
    // 大于对比的数字
    const right = [];
    for (let i = 1; i < array.length; i++) {
        // 小于的丢左边
        if (array[i] < target) {
            left.push(array[i]);
        } else {
            // 大于的丢右边
            right.push(array[i]);
        }
    }
    return quickSort(left).concat([target], quickSort(right));
}

console.log(quickSort([5, 3, 2, 8, 4, 6, 7, 9, 1]))

// c: 5 l: 3,2,4,1 r: 8,6,7,9 -> 1,2,3,4,5,6,7,8,9
// left
// c: 3 l: 2,1 r: 4 -> 1,2,3,4
// c: 2 l: 1 r: [] -> 1,2
// right
// c: 8 l: 6,7 r: 9 -> 6,7,8,9
// c: 6 l: [] r: 7 -> 6,7
// 6,7
//

function quickSort2(arr) {
    // 如果只有0、1个数字
    if (arr.length < 2) {
        return arr
    }
    // 设置第一个为中间数
    const target = arr[0]
    let left = []
    let right = []

    for (i = 1; i < arr.length; i++) {
        if (arr[i] < target) {
            left.push(arr[i])
        } else {
            right.push(arr[i])
        }
    }

    return quickSort2(left).concat([target], quickSort2(right))

}

console.log(quickSort2([88, 59, 26, 64, 35, 2, 10, 01]))
console 命令行工具 X clear

                    
>
console