冒泡排序

初级冒泡:

代码

  var changeCount = 0;
    function changePos(i, j, list) {
      console.log(changeCount++);
      var temp = null;
      temp = list[i];
      list[i] = list[j];
      list[j] = temp;
      return list;
    }

    function bubbleSort(list) {
      var temp = null;
      // var count = 0;
      for (var i = 0, len = list.length; i < len - 1; i++) {
        for (var j = i + 1; j < len; j++) {
          // console.log(count++);
          if (list[i] > list[j]) {
            changePos(i, j, list);
          }
        }
      }
      return list;
    }
    console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));

原理

注意:

这本质上 不是冒泡,他就是简单的交换

让每一个关键字和后面每一个关键字比较, 如果大 则交换

这样第一顺位,关键字 在一次循环之后 就变成了最小值了

真正的冒泡

两两比较相邻记录

小时候 排队 ,老师总会让个子小的往前站

他又吃不准 谁个子高 就挨着站比一比呗 ,en  ? 不挨着站, 比不出来吗 

说实话 没感觉前后两种算法 有啥区别

代码

   var changeCount=0
    function changePos(i, j, list) {
      console.log(changeCount++);
      var temp = null;
      temp = list[i];
      list[i] = list[j];
      list[j] = temp;
      return list;
    }
    function bubbleSort(list = []) {
      var temp = null;
      // var count = 0;
      for (var i = 0, len = list.length; i < len; i++) {
        for (var j = len - 2; j >= i; j--) {
          // console.log(count++);
          if (list[j] > list[j + 1]) {
            changePos(j, j+1, list);
          }
        }
      }
      return list;
    }
    // console.log(bubbleSort([9,1,5,8,3,7,4,6,2]));
    console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));

优势在哪里 ?

比方说 第一轮比较  ,我们是不是 就把2 提前到了,前面的位置 ,第三位

FQ:

那意思是 能减少换位次数 ??

1.比较次数 是不是不会减少

        是的,比较次数没变 老哥

2.那换位次数 会不会较少

        他妈的 也没有变 那 ???

3.那他有啥几把用 ?

        我特么哪里知道 ...

数字 如同气泡一样慢慢的往上浮,有点像冒泡了啊

冒泡改进

交换次数 可能是不好修改了

但是 是不是可以 减少 比较次数 ,

你都冒泡了 肯定可能在未比完的某个时刻,已经排好序了,之后的比较都是无意义的

    var changeCount=0
    function changePos(i, j, list) {
      // console.log(changeCount++);
      var temp = null;
      temp = list[i];
      list[i] = list[j];
      list[j] = temp;
      return list;
    }
    function bubbleSort(list = []) {
      var temp = null;
      // var count = 0;
      var flag=true
      for (var i = 0, len = list.length; i < len && flag; i++) {
        flag=false
        console.log(flag , '标识  外层次数',list);
        for (var j = len - 2; j >= i; j--) {
          // console.log(count++);
          /*  没有可以交换的数据了 的意思是, 排序完成了 不做无意义比较了  */
          if (list[j] > list[j + 1]) {
            changePos(j, j+1, list);
            flag=true
          }
        }
      }
      return list;
    }
    // console.log(bubbleSort([9,1,5,8,3,7,4,6,2]));
    console.log(bubbleSort([3, 5, 7, 9, 4, 2, 1, 0, 11, 45, 37, 88, 6]));

冒泡排序复杂度分析:

n 个数据

比较次数 n-1 , n-2, ...1 ,数列求和 n(n-1)/2

时间复杂度

O(n的平方)    平方咋写 ?? ..

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值