js--常用的四大排序

与世无争的帅哥 提交于 2020-02-05 04:28:57

1、冒泡排序

     在一排数中,从前往后对相邻的两个输依次比较和调整,让较大的数往下沉,较小的数往前冒。(第一个和第二个比较,如果后面的大于前面的则换第二个和第三个比较。。。)

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

2、选择排序

在一排数中,第一个和第二个比较,若后面的比前面小则交换下标,用最小的和后面的比较,若后面的大于前面的则下标不变。

for(var i = 0;i < arr.length - 1;i++){ //确定轮数
    var iMink =  i;   //记录最小值的下标
    for(var j = i+1;j< arr.length ;j++){
        if(arr[iMink] >arr[j]){
            iMink = j
        }
    }
    if(iMink != i){//交换数据
        var temp = arr[i]
        arr[i] = arr[iMink]
        arr[iMink] = temp;
    }
}

 3、插入排序

假设前面的数已排好顺序,现在把第n个数插入到前面的有序数列中,并排序,如此反复循环,直到排好顺序。

第二个和第一个比较,第三个和第一个、第二个比较。。。若后面的数比前面的数小则交换位置。

for(var i = 1; i < arr.length ;i++){
    for(var j = i;j > 0; j--){
        if(arr[j] < arr[j - 1]){
            var temp = arr[j]
            arr[j] = arr[j - 1]
            arr[j - 1] = temp
        }else{
            break;
        }
    }
}

4、快速排序 

选择一个基准元素,通常选第一个或最后一个;通过扫描将待排序序列分为两部分:left:比基准数小,right:比基准数大。基准元素已确定了位置,用同样的方法递归的排序划分两部分。

var arr = [1,22,4,5,7,15]
function quickSort(arr){
    if(arr.length <= 1){
        return arr
    }
    var ibase = arr.shift()
    var left = [],right = []
    for(var i = 0;i < arr.length;i++){
        if(arr[i] < ibase){
            left.push(arr[i])
        }else{
            right.push(arr[i])
        }
    }
    return quickSort(left).concat(ibase,quickSort(right))
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!