顾名思义,冒泡排序的原理就是最小(最大)的元素会在一次次迭代中逐渐浮现到数组的顶端,每一次的迭代都是相邻两个元素之间的比较.

  • 具体的算法步骤是:
  • 1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    2:对每一对相邻元素作同样的比较和操作,一直到数组最后一个元素。第一轮迭代完成后,最后的元素会是最大的数。
    3:针对所有的元素重复以上的步骤,每一轮迭代需要的比较次数为n-k,k为已经迭代的次数,因为每迭代以此,就有一个元素确定了位置。

  • 举个栗子:
    原数组:3 38 5 44 15 36,数组元素为6个
    第一轮迭代:
    38和5、44和15、44和36交换位置:3 5 38 36 15 44
    第二轮迭代:最后一个位置不需要进行比较了。因此比较次数=n-k=6-1=5
    38和36、38和15交换位置:3 5 36 15 38 44
    以此类推

  • python代码实现如下:
def bubbelSort(nums):n = len(nums)for i in range(n-1):for j in range(n-1-i):if nums[j] > nums[j+1]:nums[j], nums[j+1] = nums[j+1], nums[j]
nums = [3, 38, 5, 44, 15, 36]
bubbelSort(nums)
print(nums)
  • 算法解析:冒泡排序算法每一次迭代确定一个较大(较小)的元素所在的位置,所以一共需要进行n-1次迭代,因为确定了n-1个位置之后,剩下的一个元素位置必然就确定了,因此代码中第一层循环次数为n-1次,当前已完成迭代次数为k,每一次迭代所需要比较的次数为没有确定位置的元素,即n-k-1,因此第二层循环对应的循环次数为n-i,该算法在原来数组上进行操作,没有产生额外的空间消耗,因此空间复杂度为O(1),该算法的运行次数为(1+2+3+…+n-1)=(n-1)*n/2,时间复杂度为O(n2)。
  • 该算法的迭代次数是固定的,不论数组是否有序,迭代次数不变,比较次数不变,该算法不会改变相等元素的相对次序,以此冒泡排序算法是稳定算法。

排序算法专题-冒泡排序相关推荐

  1. Java排序算法:冒泡排序

    Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...

  2. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  3. golang 排序_常用排序算法之冒泡排序

    周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...

  4. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  5. 数据结构与算法:十大排序算法之冒泡排序

    数据结构与算法:十大排序算法之冒泡排序 package array;import java.util.Arrays;//冒泡排序 //1.比较数组中两个相邻的元素,如果第一个数比第二个数大,我们就交换 ...

  6. 【排序算法】冒泡排序、简单选择排序、直接插入排序比较和分析

    [排序算法]冒泡排序.简单选择排序.直接插入排序比较和分析 写在前面: 本文简单介绍了冒泡排序.简单选择排序.直接插入排序,并对这三种排序进行比较,入参都是80000个随机数,比较算法耗时.进一步,我 ...

  7. 排序算法(1)冒泡排序

    排序算法(1)冒泡排序 原理: 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3. ...

  8. php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

    本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法.分享给大家供大家参考,具体如下: 基本思想: 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换 ...

  9. 冒泡和快速排序的时间复杂度_常用排序算法之冒泡排序

    周末无事,带娃之余看到娃娃在算数,想到了排序-尝试着把几种常用的排序算法跟大家聊一聊,在分析的后面我会用GoLang.PHP和JS三种语言来实现下. 常见的基于选择的排序算法有冒泡排序.插入排序.选择 ...

  10. 排序算法之冒泡排序(Java版)

    排序:即使集合或数组中的元素有序化 本篇介绍最简单.最易掌握的冒泡排序 冒泡排序:         是一种简单的排序算法, 冒泡排序就像学生站队一样,要在老师的引导下,以某位同学位基准,其他学生按身高 ...

最新文章

  1. 简明Python3教程 4.安装
  2. 测试无线节能信标与主控器之间的控制功能
  3. 计算机软件硬件试讲,试讲:初识计算机网络
  4. 对用户密码进行md5加密的代码实现
  5. (太棒了)程序员的十个层次 你属于哪一层?
  6. 《T-SQL性能调优秘笈——基于SQL Server 2012 窗口函数》——1.2 使用窗口函数的解决方案简介...
  7. 【转】四阶魔方还原1
  8. 无需私钥的pssh的安装使用
  9. 排序系列 之 堆排序算法 —— Java实现
  10. matlab 直方图修正,matlab直方图修正
  11. 计算机管理即插即用服务,意外终止Plug and Play(即插即用)服务开启方法
  12. 使用Spire组件抛出异常The type initializer for 'spr857' threw an exception
  13. 智能家居(3)智能交互的竞品分析
  14. Android计步模块(类似微信运动 今日步数)
  15. html首字母样式,CSS实现段落首字母、首字放大特效
  16. 贝壳找房二手房信息爬虫
  17. 图纸设计管理平台,彩虹图纸管理软件设计管理功能
  18. cuda矩阵相乘_CUDA计算矩阵相乘
  19. 环境部署经验老衲悄悄的
  20. 增加ATMEGA328 实验电路板对外引脚

热门文章

  1. docker数据卷之dockerfile
  2. 每天一道剑指offer-二进制中1的个数
  3. mysql 流浪,流浪汉机器 – 如何找出mysql用户名/密码
  4. 如何做爬虫python在线观看_Python爬虫实战:利用scrapy,短短50行代码下载整站短视频...
  5. 主成分分析法怎么提取图片中的字_视频图像的MATLAB处理(2)两种主成分分析方法...
  6. 谷粒商城:13.分布式基础篇总结
  7. table与tr td样式重叠 table样式边框变细
  8. Ubuntu无法安装Xmind rpm包
  9. 关于线程协同的火车票售卖程序
  10. 生成对抗网络系列—CycleGAN