数据结构与算法笔记(六)—— 冒泡排序
什么是冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮”到数列的顶端。
算法步骤
- 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序的分析
那么我们需要进行 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]
数据结构与算法笔记(六)—— 冒泡排序相关推荐
- 数据结构与算法(十六)冒泡排序和鸡尾酒排序
冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,以将当前序列的最小值交换到当前序列最前端为一轮结束,需要(length-1)轮,感觉数据是一 ...
- 数据结构与算法笔记(十六)—— 二叉搜索树
一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...
- 数据结构与算法笔记 - 绪论
数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...
- 数据结构与算法笔记(青岛大学王卓老师视频)
写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...
- JS数据结构与算法 笔记
JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...
- 数据结构与算法(六)
数据结构与算法 第一章 绪论 第二章 线性表 第三章 树与二叉树 第四章 图 第五章 查找 第六章 排序 文章目录 数据结构与算法 第六章 内部排序 一.基本概念 二.冒泡排序 三.快速排序 四.直接 ...
- 数据结构与算法笔记(十五)—— 散列(哈希表)
一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...
- 数据结构与算法(六)- 单向链表的反转
数据结构与算法(六)- 单向链表的反转 一.头节点插入法 /*** 反转单向链表(头插法)** 1.先定义一个节点reverseHead = new HeroNode()* 2.从头到尾遍历原来的链表 ...
- 06_JavaScript数据结构与算法(六)单向链表
JavaScript 数据结构与算法(六)单向链表 认识链表 链表和数组 链表和数组一样,可以用于存储一系列的元素,但是链表和数组的实现机制完全不同. 数组 存储多个元素,数组(或列表)可能是最常用的 ...
- 数据结构与算法笔记(王卓网课+教材+大话数据结构)
数据结构与算法笔记(王卓网课+教材+大话数据结构) ##最新整理!!! 顺序存储结构的线性表P10-P21 顺序线性表的代码实现 链式线性表笔记 串笔记 绪论.算法(P1-P9)1.4数据起源结构 数 ...
最新文章
- reportConfig.xml两种数据源连接的配置方式
- 宝塔显示linux inode,Linux显示inode的信息
- 帝国cms模板辅助编辑插件lsk_ecms.crx使用说明
- MySQL的datetime日期格式化,和Oracle的datetime日期格式化
- Tapable.plugin is deprecated. Use new API on `.hooks` instead
- Java Spring Security示例教程中的2种设置LDAP Active Directory身份验证的方法
- Java连接微软ad_Java:连接到Active Directory(AD)?
- python3中的正则模块
- 商用彩信服务成为企业3G应用新需求
- Facebook 开源图像处理库 Spectrum,优化移动端图像生成
- 护理在计算机的应用研究,计算机虚拟和模拟技术在护理实践教学中应用的研究...
- SpringMVC Hello(IDEA)
- [Angularjs]视图和路由(四)
- 算法一看就懂之「 递归 」
- mysql第二天无法连接_jdbc 连接mysql 第二天就连接不成功,什么原因?-问答-阿里云开发者社区-阿里云...
- html5 viewpor,FileViewPro
- R语言线性回归预测网页流量
- 面试准备(集合部分)
- Linux中VI / VIM 常用操作练习
- SUSE Linux 15 If ‘netstat‘ is not a typo you can use command-not-found to lookup the package...
热门文章
- Python Elasticsearch 插入数据
- pymongo insert_many 批量插入
- Python center 用法
- python3 tensorflowprint错误_解决import tensorflow as tf 出错的原因
- syslinux引导扇区不支持ntfs文件系统_实战 FAT12 文件系统
- 五万字 Linux 知识点深度解析,学完每个人都是高手
- tableau必知必会之用 Fixed 函数实现客户回购分析
- 强化学习(四)用蒙特卡罗法(MC)求解
- Hadoop在Ubuntu下的安装配置(配置成功)
- python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!