美文网首页
10大经典算法之 - 2冒泡排序

10大经典算法之 - 2冒泡排序

作者: 张德瘦嬢嬢 | 来源:发表于2021-01-05 11:21 被阅读0次

算法思想

  • 基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。
  • 直观表达,每一趟遍历,将一个最大的数移到序列末尾。

算法描述

  • 比较相邻的元素,如果前一个比后一个大,交换之。
  • 第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。
  • 接下来第二趟,忽略已经拍好的数字,对于剩下的数字再来一轮
    ......
    动画实现
image

第一轮:

  1. 选择 10 和 34, 进行比较, 其中 10 < 34, 二者不需要交换
  2. 选择 34 和 21, 进行比较, 其中 34 > 21, 二者需要交换
  3. 选择 34 和 47, 进行比较, 其中 34 < 47, 二者需不要交换
  4. 选择 47 和 3, 进行比较, 其中 47 > 3, 二者需要交换
  5. ...
  6. 最后 47 交换到末尾

第二轮:

忽略已经排列好的47, 按照刚刚的逻辑再次排序

...

[图片上传失败...(image-e38d47-1609230829454)]

复杂度

let arr = randomArr(10000, 100)
console.time('bubleSort')  //开始时间
bubleSort(arr)
console.timeEnd('bubleSort')  //结束时间


function randomArr( arrLen = 100, maxValue = 1000 ) {
  let arr = []
  for(let i = 0; i < arrLen; i++) {
    arr[i] = Math.floor((maxValue+1)*Math.random())
  }
  return arr
}

function bubleSort(arr) {
  for(let i = 0; i < arr.length; i++) {
    for(let j = 0; j < arr.length - i; j++) {
      if(arr[j] > arr[j+1]) {
        [ arr[j], arr[j+1] ] = [ arr[j+1], arr[j] ] /*交换元素*/
      }
    }
  }
}
1w长度数组发现平均时间: image.png

以下是10-10万数组长度排序所花时间

image.png

发时间复杂度: [图片上传失败...(image-c3282c-1609230829454)]

空间复杂度: [图片上传失败...(image-39bce5-1609230829454)]

稳定性:稳定

代码实现(JavaScript)

image.png

function bubleSort(arr) {
  for(let i = 0; i < arr.length /*i代表轮数*/; i++) {
    for(let j = 0; j < arr.length - i /*j代表当前轮选中的元素下标*/; j++) {
      if(arr[j] > arr[j+1]) {
        [ arr[j], arr[j+1] ] = [ arr[j+1], arr[j] ] /*交换元素*/
      }
      //console.log(arr)
    }
  }
}

var arr = [10, 34, 21, 47, 3, 28]
bubleSort(arr)
console.log(arr)

相关文章

  • 经典排序算法总结

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

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

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

  • 常见算法汇总

    一、十大经典排序算法1. 冒泡排序 冒泡排序是一种简单的排序算法,它重复走访过要排序的数列,一次比较2个元素,如...

  • 用 Python 实现十大经典排序算法

    今天,详细的跟大家分享下 10 种经典排序算法。 10种经典排序算法包括冒泡排序、选择排序、快速排序、归并排序、堆...

  • python排序算法

    参考十大经典排序算法(动图演示) 1、 冒泡排序(Bubble Sort) 2、选择排序(Selection So...

  • php实现四大经典排序算法

    四大基本经典排序算法性能 : 快速排序 > 选择排序 > 冒泡排序 > 直接排序时间复杂度:O(n2)

  • 算法:冒泡排序

    本文内容:1、什么是冒泡排序?2、冒泡排序的 C/OC 实现与算法分析。 算法总目录:算法? 1、什么是冒泡排序?...

  • 算法-冒泡排序

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

  • 十大经典排序算法&七大查找算法

    十大经典排序算法: 十大经典排序算法的时间、空间复杂度: 冒泡排序(Bubble Sort) 算法描述: 1、比较...

  • 排序算法1:交换排序

    一、冒泡排序 谈到排序算法,首先映入脑中的便是冒泡排序,这也是我接触的第一种排序算法,的确算是一个比较经典的算法。...

网友评论

      本文标题:10大经典算法之 - 2冒泡排序

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