冒泡排序

BubleSort

复杂度分析

  1. 第一个for循环执行了length次

  2. 第二个for循环执行了length - i次

  3. 两个fore循环执行了length*(length-i)次,当length无限大复杂度是O(length^2)

思考

  1. 使用两个指针 j 和 j+1,因为要交换两个元素,所以需要两个指针分别指向需要交换的元素两个指针可以表示一定的范围,或者快慢两个
  2. 每一轮外层循环,都把最大的一个元素放到最后的位置(内层for不停的交换(即暂存最大值)两个相邻的元素),模型相当于把本轮的最大值从头部插入到已经排序的数组中 (本轮的最大值 —> [ 已经排序的元素 ] )
  3. 内层循环找最大值的方式先假设第一个是最大,从第二个元素开始比较,如果第一个比第二个大,交换(暂存最大值),然后和第三个比较
  4. 数组被分成了两部分,一部分是已经排序的,一部分待排序,以外层循环length - i -1下标作为分割
  5. 每个外层循环可以看作是当前元素的和其他元素产生的关系,类似图的邻接矩阵遍历,找到找到和当前顶点连接的所有顶点
  6. 数组可以按照下标操作,例如:图已经访问过的节点下标对应的值设置为1

代码

function BubleSort(arr){
    const len = arr.length;
    let temp = null;
    for(let i = 0; i < len; i++){
        for(let j = 0; j < len - i; j++){
            if(arr[j] < arr[j+1]){
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值