十大经典排序算法系列(一) 三种冒泡排序 优化版 js版本

        优化原理

记录内层循环中, 相邻的元素交换位置的次数.
内层循环只比较,相邻的元素没有发生交换, 说明数组已经有序.
跳外层出循环结束排序.

最好情况,该算法复杂度是 O(n)
最坏情况,是一个等差数列, O(n^2) 与 普通版循环次数无区别

var arr = [12, 0, 1, 2, 4, 3, 5, 333];

function maoPao(arr) {
    var n = arr.length;

    for(let i=0; i<n; i++){         // 总循环次数等于数组长度
        let len = n - i;            // 递减比较的长度
        var count = 0;
        for(let v=0; v<len; v++){   // 限定比较的索引值
            if(arr[v] > arr[v+1]){
                [arr[v], arr[v+1]] = [arr[v+1], arr[v]];
                count += 1;         // 交换计数
            }
        }
        console.log(count);
        if(count == 0 ) break;
    }
    return arr;
}

console.log(
    maoPao(arr)
    );

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值