美文网首页
算法-冒泡排序及优化

算法-冒泡排序及优化

作者: 0月 | 来源:发表于2019-02-13 18:01 被阅读0次

冒泡算法的原理:

升序冒泡:
两次循环,相邻元素两两比较,如果前面的大于后面的就交换位置

降序冒泡:
两次循环,相邻元素两两比较,如果前面的小于后面的就交换位置

js实现:

// 升序冒泡
function maopao(arr){
  const array = [...arr]
  for(let i = array.length; i > 0; i--){
    for(let j =0; j < i - 1; j++) {
      if (array[j] > array[j + 1]) {
        let temp = array[j]
        array[j] = array[j + 1]
        array[j + 1] = temp
      }
    }
  }
  return array
}
1.png

看起来没问题,不过一般生产环境都不用这个,原因是效率低下,冒泡排序在平均和最坏情况下的时间复杂度都是 O(n^2),最好情况下都是 O(n),空间复杂度是 O(1)。因为就算你给一个已经排好序的数组,如[1,2,3,4,5,6] 它也会走一遍流程,白白浪费资源。所以有没有什么好的解决方法呢?

答案是肯定有的:

加个标识,如果已经排好序了就直接跳出循环。

优化版:

function maopao1(arr){
  const array = [...arr]
  for(let i = array.length; i > 0; i--){
    let isOk = true
    for(let j =0; j < i - 1; j++) {
      if (array[j] > array[j + 1]) {
        let temp = array[j]
        array[j] = array[j + 1]
        array[j + 1] = temp
        isOk = false
      }
    }
    if (isOk) {
      break
    }
  }
  return array
}

测试:
数组:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

2.png

从测试结果来看:
普通冒泡排序时间:0.024ms
优化后冒泡排序时间:0.002ms

相关文章

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 算法-冒泡排序及优化

    冒泡算法的原理: 升序冒泡:两次循环,相邻元素两两比较,如果前面的大于后面的就交换位置 降序冒泡:两次循环,相邻元...

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 基础算法

    二分查找 冒泡排序(优化) 归并排序 动态规划算法

  • 冒泡与选择排序

    优化版冒泡排序 选择排序 数据交换常用三种算法对比

  • 双线程冒泡排序算法

    双线程冒泡排序算法是对冒泡排序的优化,对冒泡排序加入了另外一个线程。 冒泡排序可以从数组的第0个元素开始排列,同样...

  • 从0开始——排序

    0.排序的复杂度比较 1.冒泡排序 冒泡排序基础版本1 正宗冒泡排序优化版本 2.选择排序 3.插入排序算法 4....

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 排序算法记录

    排序算法 冒泡排序(bubble sort) 优化后时间复杂度是O(n) 选择排序(selection sort)...

  • [算法导论]-十大排序算法

    排序算法总结 一、冒泡排序 冒泡排序每次找出一个最大的元素,因此需要遍历 n-1 次。还有一种优化算法,就是立一个...

网友评论

      本文标题:算法-冒泡排序及优化

      本文链接:https://www.haomeiwen.com/subject/lpbleqtx.html