js算法学习——冒泡算法

冒泡排序是最基础最经典的算法题,他主要的目的是为了排序一个数组中元素的顺序,可以将数组中的数据从高到低从低到高进行处理;

具体实现思路

双重嵌套循环进行相邻两个数,然后大的放到小的后边。
let myArray = [40, 10, 30, 6, 65];

function bubbling(arr){
    // 外层循环,从第一个开始循环,一直查找到数组的倒数第二个
    for(let x = 0; x < arr.length-1; x++){
        // 内层循环,从第一个开始循环,一直查找到上次已经放到后边的前一个
        for(let y = 0; y < arr.length - 1 + x; y++){
            // 如果当前的项,比下一个项大,就进行位置调换,然后下一轮在比较
            if(arr[y] > arr[y+1]){
                let temp = arr[y];
                arr[y] = arr[y + 1];
                arr[y + 1] = temp;
            }
        }
    }
    return arr;
}

bubbling(myArray);

运行的基本步骤是

  1. 第一轮最外层循环 x=0,x < length-1(5-1 = 4)
    最开始的数组:[40, 10, 30, 6, 65]
    1)、内层循环第一轮 x = 0、y = 0、y < length-1-x(5-1-0 = 4)
    拿出 40 和10进行比较,40大于10,调换位置得到结果 [10, 40, 30, 6, 65]
    2)、内层循环第二轮 x = 0、 y = 1、y < length-1-x(5-1-0 = 4)
    拿出 40 和30进行比较,40大于30,调换位置得到结果 [10, 30, 40, 6, 65]
    3)、内层循环第三轮 x = 0、y = 2、y < length-1-x(5-1-0 = 4)
    拿出 40 和6进行比较,40大于6,调换位置得到结果 [10, 30, 6, 40, 65]
    4)、内层循环第四轮 x = 0、y = 3、y < length-1-x(5-1-0 = 4)
    拿出 40 和30进行比较,40小于65,不调换位置 [10, 30, 6, 40, 65]
    5)、内层循环第五轮 x = 0、y = 4、y < length-1-x(5-1-0 = 4) 条件不成立结束

  2. 第二轮最外层循环 x=1,x < length-1(5-1 = 4)
    现在的数组:[10, 30, 6, 40, 65]
    1)、内层循环第一轮 x = 1、y = 0、y < length-1-x(5-1-1 = 3)
    拿出 10 和30进行比较,10小于20,不调换位置 [10, 30, 6, 40, 65]
    2)、内层循环第二轮 x = 1、 y = 1、y < length-1-x(5-1-1 = 3)
    拿出 30 和6进行比较,30大于6,调换位置得到结果 [10, 6, 30, 40, 65]
    3)、内层循环第三轮 x = 1、y = 2、y < length-1-x(5-1-1 = 3)
    拿出 30 和40进行比较,30小于40,不调换位置 [10, 6, 30, 40, 65]
    4)、内层循环第四轮 x = 1、y = 3、y < length-1-x(5-1-1 = 3) 条件不成立结束

  3. 第三轮最外层循环 x=2,x < length-1(5-1 = 4)
    现在的数组:[10, 6, 30, 40, 65]
    1)、内层循环第一轮 x = 1、y = 0、y < length-1-x(5-1-2 = 2)
    拿出 10 和6进行比较,10大于6,调换位置得到结果 [6, 10, 30, 40, 65]
    2)、内层循环第二轮 x = 1、 y = 1、y < length-1-x(5-1-2 = 2)
    拿出 10 和30进行比较,10小于30,不调换位置 [6, 10, 30, 40, 65]
    3)、内层循环第三轮 x = 1、y = 2、y < length-1-x(5-1-2 = 2) 条件不成立结束

  4. 第四轮最外层循环 x=3,x < length-1(5-1 = 4)
    现在的数组:[10, 6, 30, 40, 65]
    1)、内层循环第一轮 x = 1、y = 0、y < length-1-x(5-1-3 = 2)
    拿出 10 和6进行比较,10大于6,调换位置得到结果 [6, 10, 30, 40, 65]
    2)、内层循环第二轮 x = 1、 y = 1、y < length-1-x(5-1-3 = 2)
    拿出 10 和30进行比较,10小于30,不调换位置 [6, 10, 30, 40, 65]
    3)、内层循环第三轮 x = 1、y = 2、y < length-1-x(5-1-3 = 2) 条件不成立结束

  5. 第四轮最外层循环 x=4,x < length-1(5-1 = 4) 不成立

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值