什么是冒泡排序

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮”到数列的顶端。


算法步骤

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

冒泡排序的分析

那么我们需要进行 n-1 次冒泡过程,每次对应的比较次数如下表所示:

Pass Comparisons
1 n-1
2 n-3
3 n-3
··· ···
n-1 1

冒泡排序的演示


时间复杂度

  • 最优时间复杂度:O(n)(表示遍历一次发现没有任何可以交换的元素,排序结束)
  • 最坏时间复杂度:O(n2)
  • 稳定性:稳定

代码实现

def bubble_sort(alist):'''冒泡排序'''n = len(alist)for j in range(n-1):count = 0for i in range(n-1-j):if alist[i] > alist[i+1]:alist[i],alist[i+1] = alist[i+1],alist[i]count += 1if 0 == count:returnif __name__ == '__main__':li = [9,5,6,8,2,7,3,4,1]print(li)bubble_sort(li)print(li)

结果:

[9, 5, 6, 8, 2, 7, 3, 4, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9]

数据结构与算法笔记(六)—— 冒泡排序相关推荐

  1. 数据结构与算法(十六)冒泡排序和鸡尾酒排序

    冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,以将当前序列的最小值交换到当前序列最前端为一轮结束,需要(length-1)轮,感觉数据是一 ...

  2. 数据结构与算法笔记(十六)—— 二叉搜索树

    一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...

  3. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  4. 数据结构与算法笔记(青岛大学王卓老师视频)

    写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...

  5. JS数据结构与算法 笔记

    JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...

  6. 数据结构与算法(六)

    数据结构与算法 第一章 绪论 第二章 线性表 第三章 树与二叉树 第四章 图 第五章 查找 第六章 排序 文章目录 数据结构与算法 第六章 内部排序 一.基本概念 二.冒泡排序 三.快速排序 四.直接 ...

  7. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  8. 数据结构与算法(六)- 单向链表的反转

    数据结构与算法(六)- 单向链表的反转 一.头节点插入法 /*** 反转单向链表(头插法)** 1.先定义一个节点reverseHead = new HeroNode()* 2.从头到尾遍历原来的链表 ...

  9. 06_JavaScript数据结构与算法(六)单向链表

    JavaScript 数据结构与算法(六)单向链表 认识链表 链表和数组 链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同. 数组 存储多个元素,数组(或列表)可能是最常用的 ...

  10. 数据结构与算法笔记(王卓网课+教材+大话数据结构)

    数据结构与算法笔记(王卓网课+教材+大话数据结构) ##最新整理!!! 顺序存储结构的线性表P10-P21 顺序线性表的代码实现 链式线性表笔记 串笔记 绪论.算法(P1-P9)1.4数据起源结构 数 ...

最新文章

  1. reportConfig.xml两种数据源连接的配置方式
  2. 宝塔显示linux inode,Linux显示inode的信息
  3. 帝国cms模板辅助编辑插件lsk_ecms.crx使用说明
  4. MySQL的datetime日期格式化,和Oracle的datetime日期格式化
  5. Tapable.plugin is deprecated. Use new API on `.hooks` instead
  6. Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
  7. Java连接微软ad_Java:连接到Active Directory(AD)?
  8. python3中的正则模块
  9. 商用彩信服务成为企业3G应用新需求
  10. Facebook 开源图像处理库 Spectrum,优化移动端图像生成
  11. 护理在计算机的应用研究,计算机虚拟和模拟技术在护理实践教学中应用的研究...
  12. SpringMVC Hello(IDEA)
  13. [Angularjs]视图和路由(四)
  14. 算法一看就懂之「 递归 」
  15. mysql第二天无法连接_jdbc 连接mysql 第二天就连接不成功,什么原因?-问答-阿里云开发者社区-阿里云...
  16. html5 viewpor,FileViewPro
  17. R语言线性回归预测网页流量
  18. 面试准备(集合部分)
  19. Linux中VI / VIM 常用操作练习
  20. SUSE Linux 15 If ‘netstat‘ is not a typo you can use command-not-found to lookup the package...

热门文章

  1. Python Elasticsearch 插入数据
  2. pymongo insert_many 批量插入
  3. Python center 用法
  4. python3 tensorflowprint错误_解决import tensorflow as tf 出错的原因
  5. syslinux引导扇区不支持ntfs文件系统_实战 FAT12 文件系统
  6. 五万字 Linux 知识点深度解析,学完每个人都是高手
  7. tableau必知必会之用 Fixed 函数实现客户回购分析
  8. 强化学习(四)用蒙特卡罗法(MC)求解
  9. Hadoop在Ubuntu下的安装配置(配置成功)
  10. python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!