Mardanjan / Blog

学习笔记(在issues里),一些小demo的源码在这里,demo在线地址会持续更新
1 stars 0 forks source link

算法:排序 #18

Open Mardanjan opened 4 years ago

Mardanjan commented 4 years ago

普通冒泡排序

var arr = [5,55,21,1,2,3,4]
function babelSort (arr) {
    for (var i = 0; i< arr.length - 1 ; i++) {
        for(var j =0 ; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j+1]) {
                arr[j] = [arr[j+1], arr[j+1] = arr[j]][0]
            }
        }
    }
    return arr
}
console.log(babelSort(arr))

快速排序

function quickSort (arr) {
    if (arr.length <= 1) {
        return arr
    }
    let left = [], right = []
    let  baseVal = arr.pop()
    arr.map(item => {
        if (item > baseVal) {
            right.push(item)
        } else {
            left.push(item)
        }
    })
    return quickSort(left).concat([baseVal], quickSort(right))
}
console.log(quickSort(arr))

选择排序

思路:从未排序数组中找到最大或最小的元素,放到数组的首位
接着再从未排序的数组中找出最大或最小的,放到排序数组的末尾
以此循环达到排序的目的

function selectionSort (arr) {
    for (var i = 0; i < arr.length ; i++) {
        minIndex = i
        for (var j = i+1; j < arr.length ; j++ ) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j
            }
        }
        if (minIndex!= i) {
            arr[i] = [arr[minIndex], arr[minIndex] = arr[i]][0]
        }
    }
    return arr
}
console.log(selectionSort(arr))