zoukankan      html  css  js  c++  java
  • 三大经典排序算法之最经典之冒泡排序

    排序算法:冒泡排序

    冒泡排序的思想:让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可

    let ary = [12,8,24,16,1];
    第一轮开始比较:
    12>8  交换位置 [8,12,24,16,1]
    12<24  不交换位置  [8,12,24,16,1]
    24>16  交换位置   [8,12,16,24,1]
    24>1  交换位置  [8,12,16,1,24]
    第一轮完成后,虽然没有实现出最后的效果,但是当前数组中最大的这个值24放到了末尾
     
    第二轮开始比较
    8<12  不交换位置  [8,12,16,1,24]
    12<16  不交换位置  [8,12,16,1,24]
    16>1 交换位置 [8,12,1,16,24]
    不用再和24比较了,而且本轮结束剩余值中最大的16也放到末尾了
     
    第三轮比较
    8< 12  不交换位置 [8,12,1,16,24]
    12>1  交换位置 [8,1,12,16,24]
    不用再和16比较了,而且本轮技术剩余值最大的12也放到末尾了
     
    第四轮比较
    8>1  交换位置 [1,8,12,16,24]
    冒泡结束
     
    需要比较length-1轮(5个数,只需要把4个最大的依次放到末尾即可)
    第一轮比较4次,最多比较length-1次(不用和自己比较)
    第二轮比较3次,每一轮比较我们都把当前最大的放到了末尾,所以当前轮比较多少次,需要把之前放到末尾的值也得去掉
    ...
     
    /*冒泡排序*/
    // ary传入的数组
    // return的是返回的新数组
    function bubble(ary){
      let temp = null;
      //外层循环i控制比较的轮数
      for(let i = 0 ; i< ary.length-1; i++){
      //里层循环控制每一轮比较的次数
        for(let j=0;j< ary.length-1-i; j++){
          if(ary[j]>ary[j+1]){
          //当前项大于后一项
            temp = ary[j];
            ary[j] = ary[j+1];
            ary[j+1] = temp;
          }
        }
    }
    return ary;
    }
    let ary = [12,8,24,16,1];
    ary = bubble(ary);
    console.log(ary);
     
  • 相关阅读:
    Android获取两条线之间的夹角度数
    Android字体度量(FontMetrics)
    Android下如何计算要显示的字符串所占的宽度和高度
    Android 颜色渲染PorterDuff及Xfermode详解
    从输入URL到页面加载的全过程
    滚动优化
    常用的前端相关chrome插件
    DNS预解析prefetch
    资源预加载preload和资源预读取prefetch简明学习
    使用chrome开发者工具中的performance面板解决性能瓶颈
  • 原文地址:https://www.cnblogs.com/itsmart/p/12600325.html
Copyright © 2011-2022 走看看