js 常見四種排序

shijf發表於2021-02-27
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 協議》,轉載必須註明作者和本文連結
支付寶領個紅包就是對我最大的讚賞了

相關文章