js实现常见排序算法

1,冒泡排序。
顾名思义,就是从头开始,每两个相邻元素相互比较,把大的放后面,这样子经过一次循环,最大的数就被冒泡到最后面了。下一次循环也是这样,只是需要循环的长度减一(排除最后一个数字)

function bubbleSort(arr){
    var len = arr.length;
    for(var i = 0; i < len; i++){
        for(var j = 0; j < len - 1 - i; j++){
            if(arr[j] > arr[j+1]){
                var tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
    return arr;
}

2,选择排序。就是每次从头到尾寻找一个最小的数字,把他放到最前面,下一次循环也是这样,循环长度减1(去掉最前面的最小数)

function selectSort(arr){
    var minIndex,len = arr.length;
    for(var i = 0; i < len - 1; i++){
        minIndex = i;
        for(var j = i + 1; j < len; j++){
            if(arr[j] < arr[minIndex]){
                minIndex = j;
            }
        }
        var tmp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = tmp;
    }
    return arr;
}

3,选择排序。就跟打扑克一样,从左到右,每次把当前的数字跟前面的比较,比他小就插到他前面。在代码中就是先用current表示当前数字,跟他前面的数字比较,比他小就把前面的数字往后放一位,这样,就空出来一个位置。当前面的数字比current小,就把current放到空出来的位置。

function insertSort(arr){
    var len = arr.length,
        current;
    for(var i = 1; i < len; i++){
        current = arr[i];
        for(var j = i - 1; j >= 0; j--){
            if(arr[j] > current){
                arr[j+1] = arr[j];
            }else{
                arr[j+1] = current;
                break;
            }
        }
    }
    return arr;
}

4,快速排序,就是选择一个数字,一般选中间的数midValue,数组中比他小的放进left数组,比他大的放在right数组中。递归调用,若是数组长度小于2,直接返回数组。最后将left和midValue和right拼接起来。

function quickSort(arr){
    var len = arr.length;
    if(len < 2){
        return arr;
    }
    var midIndex = Math.floor(len/2);   
    var midValue = arr.splice(midIndex,1);
    var left = [],
        right = [];
    arr.forEach(function(v){
        if(v < midValue){
            left.push(v);
        }else{
            right.push(v);
        }
    });
    return quickSort(left).concat(midValue, quickSort(right));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值