javascript的排序算法

已经准备秋招一段时间了,因为这个关系也在各种巩固知识,顺便整理一下一些东西。这篇文章就是自己整理了一下各种JS的排序算法,以便自己以后回顾。

冒泡排序

function bubbleSort(arr){
    var len = arr.length
    for(var i=len-1;i>0;i--){
        for(var j=0;j<i;j++){
            var temp = 0
            if(arr[j]>arr[j+1]){
            //如果前一个元素大于后一个元素,则交换位置
            var temp = 0
            temp = arr[j+1]
            arr[j+1] = arr[j]
            arr[j] = temp
            }
        }
    }
    return arr
}

var arr = [1,2,5,4,56,54,33,2,23]
bubbleSort(arr) //[1, 2, 2, 4, 5, 23, 33, 54, 56]

  

快速排序

function quickSort(arr){
    if(arr.length<1){
        return arr
    }
    //选取基数
    var pivotIndex = Math.floor(arr.length/2)
    var pivot = arr.splice(pivotIndex,1)

    var left = []  //放置小于基数的数
    var right = []  //防止大于基数的数
    for(var i=0;i<arr.length;i++){
        if(arr[i]>pivot){
            right.push(arr[i])
        }else{
            left.push(arr[i])
        }
    }
    return quickSort(left).concat(pivot,quickSort(right))
}

var arr = [1, 2, 3, 4, 5]
quickSort(arr)  //[1, 2, 3, 4, 5]

  

选择排序
将待排序列中最小的值与第一个位置的值交换;
剩下的值中再取最小的值与第二个位置的值交换,以此类推直到所有的顺序都排好。

function selectSort(arr){
    var len = arr.length
    for(var i=0;i<len-1;i++){
        var min = arr[i]  //默认先将第i个值列为最小值
        var minIndex = i  //最小值的下标
        for(var j = i+1;j<len;j++){
            //从第i个值之后的值开始比较,因为i之前的值已经排好序
            if(arr[j]<min){
                min = arr[j]
                minIndex = j
            }
        }
        //将第i个值与最小值交换位置
        arr[minIndex] = arr[i]
        arr[i] = min
    }
    return arr
}

var arr = [3,2,13,5,6,7]
selectSort(arr)  //[2, 3, 5, 6, 7, 13]

  

插入排序
从第二个元素开始排序;
待排元素之前的元素已经排好序,将待排元素按照大小插入合适的位置,以此类推。

function insertSort(arr){
    var len = arr.length
    for(var i=1;i<len;i++){
        var now = arr[i]
        var j = i-1
        while(j>=0 && arr[j]>now){
            arr[j+1] = arr[j]  //数组后移
            j--
        }
        arr[j+1] = now
    }
    return arr
}

var arr = [1,3,2,5,4]
selectSort(arr)  //[1, 2, 3, 4, 5]

  

原文地址:https://www.cnblogs.com/minz/p/5971254.html