冒泡排序法

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,每次比较相邻两个元素的大小,如果list[i] > list[i+1]就把他们交换位置。遍历数列重复地进行比较直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的尾端。

冒泡排序算法的运作如下:

  • 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
  • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

冒泡排序的分析

代码如下:

def bubble_sort(li):for i in range(len(li) - 1, 0, -1): # 产生由len(li)-1到0的递减数列,每一此遍历的数都会比上一次少一个count = 0  # 设置一个变量记录列表元素交换次数for j in range(i):  # iif li[j] > li[j + 1]:  # 如果list[i] > list[i+1] 就把他们交换位置li[j], li[j + 1] = li[j + 1], li[j]count += 1 if count == 0:  # 如果一个循环中没有元素交换则表明列表已经有序了,直接break退出break

也可以这样写:

def bubble_2(li):n = len(li)for i in range(n - 1):  # 遍历次数越来越小count = 0for j in range(n - 1 - i):if li[j] > li[j + 1]:li[j], li[j + 1] = li[j + 1], li[j]count += 1if count == 0:break

两个for 时间复杂度为O(n^2)
稳定性: 稳定

冒泡排序法 - python版详解相关推荐

  1. 面向对象编程(Python版详解)

    [辰兮要努力]:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端.后台.数据 ...

  2. java里冒泡排序编程案例_冒泡排序法-java案例详解

    /** * 功能:冒泡排序法 * 思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码, * ,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移 ...

  3. python2.7除法_对python中的float除法和整除法的实例详解

    从python2.2开始,便有两种除法运算符:"/"."//".两者最大区别在: python2.2前的版本和python2.2以后3.0以前的版本的默认情况下 ...

  4. Python数据分析详解

    Python数据分析详解 数据分析概述 python在数据分析方面有哪些优势 Python不受数据规模的约束,能够处理大规模数据. Python的sklearn库提供了丰富的数据挖掘和人工智能方法,为 ...

  5. 【Python】详解 try-except-else-finally 语句 —— 异常处理完全解读 (上)

    目录 一.绪论 (introduction) 二.异常捕获 (exception catching) 2.1 try-except 语句 2.1.1 基本用法 2.1.2 指定异常类型 2.1.3 小 ...

  6. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  7. 用Advanced Installer制作DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版详解

    关于 DotNetBar for Windows Forms 12.0.0.1_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  8. python区块链开发_Fabric区块链Python开发详解

    Hyperledger Fabric是最流行的联盟区块链平台.Fabric区块链Python开发详解课程 涵盖Fabric区块链的核心概念.Fabric网络搭建.Node链码开发.Python应用开发 ...

  9. python装饰器setter_第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter...

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

最新文章

  1. 巧用CSS的RevealTrans滤镜
  2. Java数据结构与算法——插入排序
  3. 有监督回归:鲁棒学习
  4. 我的世界minecraft-Python3.9编程(2)-开发环境配置(2)
  5. 07-01-安装-Exchange Server 2019 on Win 2019 Core
  6. 纪中B组模拟赛总结(2020.2.22)
  7. vue项目登录及token验证 vue-ant
  8. 【Computer Organization笔记07】实验课:可编程逻辑器件介绍,硬件编程方法与原则,硬件编程流程
  9. Java实现提取拼音首字母
  10. 技巧:删除桌面上提示找不到该项目的文件
  11. 微信公众号文章编辑的几点经验
  12. 微信营销有哪些优缺点?
  13. SQL Story(十)————游标的应该与不应该 (转)
  14. PhaserTape:把智能手机变成测距仪
  15. 使用python操作qq邮箱发送邮件
  16. 多方寻路RFID酝酿突围
  17. Winform基础入门(一)
  18. Atitit.木马 病毒 免杀 技术 360免杀 杀毒软件免杀 原理与原则 attilax 总结...
  19. 前世今生的痴,问谁可以洞悉
  20. 怎么对document.write写出来的内容调整对齐方式_干不过写PPT的?麦肯锡老阿姨教你4招...

热门文章

  1. Android的图片叠加
  2. rolling方式修改oplog
  3. JDK的可视化工具系列 (四) JConsole、VisualVM
  4. Angular2学习笔记(六) Angular2 依赖注入
  5. oracle两种导出导入方式,即imp与impdp之比较
  6. 曾鸣[长江商学院教授]_互动百科
  7. UIView 中常见的方法总结
  8. 安装node.js,CoffeeScript,Express.js,mysql,jade
  9. MSDN-MDX#001 - 多维表达式 (MDX) 参考
  10. C下的全局变量和指针 - C/C++ / C语言