JS实现从小到大排序算法

57 阅读1分钟
let arr = [2,5,6,3,1,7]
//冒泡排序
let BubbleSort = function(arr){
    for(let i =0;i<arr.length;i++){
        for(let j =i+1;j<arr.length;j++){
            if(arr[i]>arr[j]){
                let tmp = arr[i]
                arr[i] = arr[j]
                arr[j] = tmp
            }
        }
    }
}

BubbleSort(arr)
console.log(arr)//[ 1, 2, 3, 5, 6, 7 ]

//选择排序
let SelectSort = function(arr){
    for(let i = 0;i<arr.length;i++){
        let minIndex = i
        for(let j = i+1;j<arr.length;j++){
            if(arr[j]<arr[minIndex]){
                minIndex = j
            }
        }
        let tmp = arr[minIndex]
        arr[minIndex] = arr[i]
        arr[i] = tmp
    }
}

SelectSort(arr)
console.log(arr)//[ 1, 2, 3, 5, 6, 7 ]

//快速排序
let quickSort = function(arr){
    quickSortFunc(arr,0,arr.length-1)
}
let quickSortFunc = function(arr,le,ri){
    if(le>=ri){
        return
    }
    let mid = partition(arr,le,ri)
    quickSortFunc(arr,le,mid-1)
    quickSortFunc(arr,mid+1,ri)
}
let partition = function(arr,le,ri){
    let pivot = le
    let l = le+1
    let r = ri
    while(l<r){
        while(l<r&&arr[l]<=arr[pivot]){
            l++
        }
        if(l!=r){
            swap(arr,l,r)
            r--
        }
    }
    if(l==r&&arr[r]>arr[pivot]){r--}
    swap(arr,r,pivot)
    return r
}
let swap = function(arr,l,r){
    let tmp = arr[l]
    arr[l] = arr[r]
    arr[r] = tmp
}

quickSort(arr)
console.log(arr)//[ 1, 2, 3, 5, 6, 7 ]