三大算法(一)js实现冒泡排序

// 需求:冒泡排序。
      // 理论:1.比较轮数n-1。  2.比较次数n-1。   3.符合某个条件交换位置。
      // 核心:双重for循环。
      // 步骤:
      var arr = [7, 6, 5, 4, 3, 2, 1];
      console.log(arr); // => [7, 6, 5, 4, 3, 2, 1]

      // 如果比较完毕提前结束比较(判断,如果本轮比较没有移动任何元素,那么说明已经比较完成)
      var m = 0;
      var n = 0;
      // 1.双重for循环。(外循环控制轮数)
      for (var i = 0; i < arr.length - 1; i++) {
        // 开闭原则(写在第一个for循环里面,是为了每轮比较初始化bool变量为true)
        var bool = true;
        // 2.指定轮数和次数。(内循环控制次数)
        for (var j = 0; j < arr.length - 1 - i; j++) {
          // 3.判断是否符合标准。如果符合标准交换位置。
          // 从小到大排列,如果前面比后面大,那么交换位置。
          // if (arr[j] > arr[j + 1]) {
          //   // var temp = arr[j + 1];
          //   // arr[j + 1] = arr[j];
          //   // arr[j] = temp;
          //   // 简写:
          //   [arr[j + 1], arr[j]] = [arr[j], arr[j + 1]];
          //   bool = false;
          // }
          // 简写:
          arr[j] > arr[j + 1] ? (([arr[j + 1], arr[j]] = [arr[j], arr[j + 1]]), (bool = false)) : "什么都不做";
          m++;
        }
        n++;
        // bool这个变量默认值为true;如果本轮比较有一对元素相互交换位置,那么也不能跳出循环
        // 但是,如果本轮比较没有任何元素相互交换位置,那么说明上一轮就已经比较完成,可以跳出循环
        if (bool) {
          break;
        }
      }
      console.log(arr); // => [1, 2, 3, 4, 5, 6, 7]
      console.log(m); // => 21次
      console.log(n); // => 6轮

 

posted @ 2021-04-20 15:40  web_cnblogs  阅读(77)  评论(0)    收藏  举报