数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析
冒泡排序是一种用时间换空间的排序方法,最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序。在这种情况下,每一次比较都需要进行交换运算。
举个例子来说,一个数列 5 4 3 2 1 进行冒泡升序排列,
第一次大循环从第一个数(5)开始到倒数第一个数(1)结束,比较过程:先比较 5 和 4,4 比 5 小,交换位置变成 4 5 3 2 1;比较 5 和 3,3 比 5 小,交换位置变成 4 3 5 2 1……最后比较 5 和 1,1 比 5 小,交换位置变成 4 3 2 1 5。这时候共进行了 4 次比较交换运算,最后 1 个数变成了数列最大数。
第二次大循环从第一个数(4)开始到倒数第二个数(2)结束。进行3次比较交换运算。
……
所以总的比较次数为 4 + 3 + 2 + 1 = 10次。
对于 n 位的数列则有比较次数为 (n-1) + (n-2) + ... + 1 = n * (n - 1) / 2,这就得到了最大的比较次数。
故使用 O(N^2) 表示排序的时间复杂度。
举个例子来说,如果 n = 10000,那么 n(n-1) / 2 = (n^2 - n) / 2 = (100000000 - 10000) / 2,相对 10^8 来说,10000 小的可以忽略不计了,所以总计算次数约为 0.5 * N^2。用 O(N^2) 就表示了其数量级(忽略前面系数 0.5)。
(SAW:Game Over!)
数据结构与算法 / 冒泡排序最坏情况下的时间复杂度解析相关推荐
- 下列各排序法中,最坏情况下的时间复杂度最低的是(**C** )A.希尔排序 B.快速排序 C.堆排序 D.冒泡排序
下列各排序法中,最坏情况下的时间复杂度最低的是(C ) 希尔排序 A.快速排序 B.堆排序 C.冒泡排序 D.正确答案:C 题目解析: 堆排序最坏情况时间下的时间复杂度为 O(nlog2n) :希尔排 ...
- 算法练习——在有序序列(r1,r2,...,rn)中,存在序号i(1<=i<=n),使得ri=i。请设计一个分治算法找到这个元素。 要求算法在最坏情况下的时间性能为O(logn))
算法练习 题目 答案 注意 题目 答案 #include<iostream> using namespace std; int find(int a[],int left,int righ ...
- 算法的最坏情况与最佳情况
原文链接:http://www.nowamagic.net/librarys/veda/detail/2196 如果一个程序运行多次,则有时候它会快点儿,有时候它会慢点儿.算法也一样,在输入1的情况下 ...
- 设n个不同的整数排好序后存于T[1..n]中,若存在一个下标i(1≤ i ≤ n),使得T[i]=i。试设计一个有效算法找到这个下标,要求算法在最坏情形下的计算时间为O(log n)
转自http://zmp1123.blog.163.com/blog/static/1193291592013314581911/ 设n 个不同整数排好序后存于T[0:n-1]中,若存在一个下标i,0 ...
- Leapfrog Triejoin:最坏情况下的最优连接算法
介绍 leapfrog triejoin是商业数据记录系统 LogicBlox® 采用的一种新颖的连接算法,在不同的基准测试中表现出色.leapfrog triejoin论文的写作者认为这个算法,即使 ...
- 常见数据结构与算法整理总结(下)
原文链接:https://www.jianshu.com/p/42f81846c0fb 这篇文章是常见数据结构与算法整理总结的下篇,上一篇主要是对常见的数据结构进行集中总结,这篇主要是总结一些常见的算 ...
- 两个鸡蛋测试:从100层楼往下扔鸡蛋,求最坏情况下确认保证鸡蛋可以不破的最大楼层所需次数
最坏情况下求得最优解所需的次数 内容说明 本文是在看过<<妙解谷歌压箱底面试题:如何正确的从楼上抛鸡蛋>>一文以后做的总结,该文章对此问题描写的很详细,但是在拜读的过程中也花了 ...
- 连接定义点作用_最坏情况下最优连接(Worst-Case Optimal Joins)
所谓最坏情况下最优连接(Worst-Case Optimal Joins),是一项关于数据库中连接操作的最新技术.给定若干表{R1, R2, ..., Rn},在它们之上的多表连接所能得到结果的数量上 ...
- 有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破。给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数。
有一栋楼共100层,一个鸡蛋从第N层及以上的楼层落下来会摔破, 在第N层以下的楼层落下不会摔破.给你2个鸡蛋,设计方案找出N,并且保证在最坏情况下, 最小化鸡蛋下落的次数.(假设每次摔落时,如果没有摔 ...
最新文章
- 微信为什么打不开html,微信打不开怎么回事 微信打不开解决方法
- 用好这 12 款 Chrome 扩展,让你的「新标签页」变得好看又实用
- request和response对象如何解决中文乱码问题?
- hive或mysql报错Too many connections
- 2017.09.21学习总结
- 7-5 日期问题面向对象设计(聚合二) (40 分)
- JVM源码分析之栈溢出完全解读
- ASP.NET MVC4中的异步控制器
- 通过一个实例掌握测试工具JMeter的一些基本概念
- 对应node版本_Node.js 应用故障排查手册 —— Node.js 性能平台使用指南
- 【颜纠日记】利用PS在原创图片上制作十字水印
- java读加密excel,JAVA读取加密的Excel文件
- [个人笔记] Zabbix配置钉钉群聊告警机制
- 2021年中国皮革行业市场现状分析,PU合成革趋势明显,汽车皮革是关键需求「图」
- 5月17号,记住这一天
- Matlab绘图技巧--如何去除图上方和右方刻度
- finalize机制
- 一文看懂DAG技术的现状与趋势
- 计算机关闭后剪切板的内容会消失,清除win10剪贴板历史记录,保证隐私数据不泄露...
- cocos creator 实现手机震动的效果
热门文章
- 配置HDFS HttpFS和WebHDFS
- WSL端口映射到win
- Spark On K8S 在有赞的实践与经验
- 【收藏】MySQL出现data too long for column ‘name‘ at row 1 解决
- notepad++安装
- scala方法定义示例
- Scala入门示例反编译分析代码执行流程
- Scala中的/,%,++,--
- Linux wc命令统计文件大小
- Python Django 使用cookie实现三天免登录及记住密码功能代码示例