js 常见四种排序

let arr = [9,6,2,1,4,5,7,8,0,3];

function quickSortClassic(arr) {
    // 定义一个基准值
    let p = arr[0]

    // 定义一个基准值的左边数组
    let left_arr = []
    // 定义一个基准值的右边数组
    let right_arr = []
    // 循环遍历,比基准值大的放左边数组,反之放右边数组
    for (let i = 1; i < arr.length; i++) {
        let  temp = arr[i]
        temp < p ? left_arr.push(temp) : right_arr.push(temp)
    }

    // 左边和右边数组,如果有一方的长度大于1,则递归上边步骤
    if (left_arr.length >= 2) {
        left_arr = quickSortClassic(left_arr)
    }
    if (right_arr.length >= 2) {
        right_arr = quickSortClassic(right_arr)
    }
    return left_arr.concat(p,right_arr);
}
function quickSortEs6(arr) {
    if(!arr.length){
        return[]
    }
    const [p, ...rest] = arr
    return [...quickSortEs6(rest.filter(item => item < p)), p, ...quickSortEs6(rest.filter(item => item >= p))]
}
function SelectionSort(arr= [1, 2, 3, 4]) {
    /** 排序过程演示
     0 2
     0 3
     0 4
     1 2
     1 3
     1 4
     2 3
     2 4
     3 4
     */

    const len = arr.length;

    for (let i = 0; i < len ; i++) {
        for (let j = i; j < len; j++) {
            if (arr[i] > arr [j + 1]) {
                let temp = arr[i]
                arr[i] = arr[ j + 1]
                arr[j + 1] = temp
            }
        }
    }

    return arr
}
function bubbleSort(arr) {
    let len= arr.length;

    for (let i = 0; i < len ; i++) {
        for (let j = 0; j < len - i; j++) {
            if (arr[j] > arr [j + 1]) {
                let temp = arr[j]
                arr[j] = arr[ j + 1]
                arr[j + 1] = temp
            }
        }
    }

    return arr
}

console.log(quickSortClassic(arr));
console.log(quickSortEs6(arr))
console.log(SelectionSort(arr))
console.log(bubbleSort(arr))
本作品采用《CC 协议》,转载必须注明作者和本文链接
支付宝领个红包就是对我最大的赞赏了
shijf
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!