冒泡排序的基本思想

时间复杂度为O(N^2)

每次比较两个相邻元素,如果他们的顺序错误就把它们交换过来。

举个栗子

例如我们需要将 12,35,99,18,76,  5个数进行从大到小排序,既然是从大到小排序,也就是越小越靠后。
首先比较第一个数和第二个数,第一个是12,第二个是35,发现12 小于35,由于是越小越靠后,因此要对这两个数交换位置,那么交换后的顺序为 35,12,99,18,76。按照之前的方法,我们比较第二个和第三个数,第二个是12第三个是99,99大于12,所以要交换两个数的位置,交换过的顺序为 35,99,12,18,76。以此类推,可以通过下图来看12的位置变化:
12,35,99,18,76   初始数据
35,12,99,18,76   第1次交换
35,99,12,18,76   第2次交换
35,99,18,12,76   第3次交换
35,99,18,76,12   第4次交换 (5-1,假设要排序的个数为m,那么比较次数m-1,那么最糟糕情况下交互次数就是m-1)
进行4次交换后,就成功把最小的数12给排到最后面了。

现在我们已经将最小的数给归位了,现在对剩下的数再进行归位,细节我就不讲了,就将下重要的。

对剩下4个数进行排序:

99,18,76,35,12 (交换了3次,比较次数3)

对剩下3个数进行排序:

99,76,18,35,12  (比较了1次【99,76】,交换了1次【18,76】,比较次数2)

对剩下2个数进行排序:

99,76,18,35,12 (交换了0次,比较1次)

就如同一个气泡,一步步向上翻滚,最后成功浮出水面,所以他叫冒泡排序。

代码

 public static void main(String[] args) {//生成数据源//待排序个数int n=5;int src[]=new int[n];src[0]=12;src[1]=35;src[2]=99;src[3]=18;src[4]=76;//冒泡排序//遍历第一个到最后一个for (int i=0; i<n;i++) {//执行n次//比较剩余的数据for (int j=0 ;j<n-i-1; j++) {//j<n-i-1 防止src[j+1]数组越界,执行n-1次if(src[j]<src[j+1]){int temp=src[j+1];//最差情况执行n-1次src[j+1]=src[j];//最差情况执行n-1次src[j]=temp;//最差情况执行n-1次}}}//打印排序for (int i=0; i<n;i++) {System.out.println(src[i]);//最差情况执行n次}}
//   结果
//  99
//  76
//  35
//  18
//  12}

为什么时间复杂度为O(N^2)

计算最糟糕情况

要排序的个数n

第一层for

执行了n次

第二层for

第一次比较了n-1次

第二次比较了n-2次

....

第n-1次比较了1次

执行的总次数

count=3(1+2+3+4+.....+n-1)(n为正整数)

打印for

执行了n次

所有总的次数:

sum=n+3(1+2+3+4+...+n-1)+n+(n-n)=3(1+2+3+4+...+n-1+n)-n

如果n为偶数

sum=3* n/2*(n+1) -n=3/2(n^2+n)-n=1/2(3n^2+n)

如果n为奇数

sum=3((n-1)/2 *n+(n+1)/2)-n=3/2(n^2+1)-n=1/2(3n^2-2n+3)

所以最差的情况的时间复杂度为O(N^2),最好的情况我就不推了,O(N)

冒泡排序+怎么计算时间复杂度相关推荐

  1. 你还在为时间复杂度不懂而担心吗???赶紧进来,这里手把手教你计算时间复杂度!!!

    作者:低调 作者宣言:写好每一篇博客 文章目录 前言 一.什么是时间复杂度? 1.1时间复杂度的概念 1.2复杂度计算在算法的意义 1.3如何计算常见算法的时间复杂度? 二.常见时间复杂度计算举例 三 ...

  2. 计算时间复杂度--(简单版)

    步骤: 1.找到执行次数最多的语句 2.语句执行语句的数量级 3.用O表示结果 计算时间复杂度的3个出发点,掌握这三个出发点,那么一向搞不懂的时间复杂度就可以迎刃而解啦. 然后: 1.用常数1取代运行 ...

  3. 主项定理Master Method 计算时间复杂度

    在面试题目中有一部分是让大家求时间复杂度的问题,例如给出我们:  T(n) = a * T(n/b) + f(n)   ( a  ³  1,b  >  1,f(n)一般是个简单函数)这样的递归方 ...

  4. python实现真正的冒泡排序算法(时间复杂度优化版)!

    近期很多童鞋在讨论大厂面试的算法题,有部分同学表示一脸懵逼,不知从何下手,还有一一部分同学写的冒泡排序算法是直接从网上复制下来的冒泡排序,大多数都没有考虑时间复杂度,说白了只是实现了冒泡的流程,严格来 ...

  5. java求时间复杂度求值_计算时间复杂度例题(示例代码)

    一.引言: 写给自己看 算法是程序的灵魂,想学好算法就必须先搞懂时间复杂度 算时间复杂度就是算基本语句条数 5个例题 二.例题 1). for(int i=0; i for(int j=i; j Sy ...

  6. 三道计算时间复杂度的题目

    出处: 算法第四版 Edition Sedgewick 著,问题 1.4.7 三道小题初看觉得很简单,但是仔细一分析,a.b小题里面的内循环操作次数是和外层的n.i值有关,并不是简单的操作N次,很久没 ...

  7. 冒泡排序算法、时间复杂度和稳定性

    冒泡排序 冒泡排序一般是我们学习排序算法时第一个接触的算法,下面来介绍一下冒泡排序. 算法原理 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾 ...

  8. 量子计算机计算时间复杂度,量子计算复杂性理论综述.PDF

    量子计算复杂性理论综述 第卷第期 计 算 机 学 报 39 12 Vol.39No.12 年月 201612 CHINESEJOURNALOFCOMPUTERS Dec.2016 量子计算复杂性理论综 ...

  9. Python3~~ 冒泡排序法,时间复杂度O(n2)

    def bubbleSort(nums):for i in range(len(nums)-1): # 这个循环负责设置冒泡排序进行的次数for j in range(len(nums)-i-1): ...

最新文章

  1. 编写函数,模拟内置函数 sorted()。
  2. 【Pytorch神经网络理论篇】 32 PNASNet模型:深层可分离卷积+组卷积+空洞卷积
  3. 11-13SQLserver基础--数据库之事务
  4. Python框架篇之Django(Template模版:标签tag、自定义filter、extend模板继承)
  5. java里的foreach迭代器_java 中 for 、foreach 和 迭代器 的学习笔记
  6. 微信 的微服务器配置,spring-boot wm-accesstoken
  7. 2741. [济南集训 2017] 掰巧克力
  8. 超像素分割算法(SLIC)
  9. 微控制器STM32L412RBT6,STM32L412CBU6(128KB)MCU+FPU,规格
  10. 领导者激励团队的最佳方法
  11. 记录清理服务器挖矿木马warmup的命令
  12. 中国海洋大学计算机考研怎么样,中国海洋大学考研难吗?一般要什么水平才可以进入?...
  13. html文字自动放大缩小单位,如何css控制字体按百分比放大缩小
  14. 动作捕捉(Motion Capture)文件BVH的解读笔记
  15. 1、ATK-LORA-01
  16. 我的读书笔记 - 《暗时间》
  17. IDEA 导入maven项目后导(下载)包失败的问题
  18. 你应该知道的软件测试28个误区
  19. python电子章_利用python去除红章
  20. python登录斗鱼_Python3自动登录web

热门文章

  1. 业财一体化为何是企业经营管理重中之重?
  2. Fikker防盗链原理与实现 - 不改动任何网站程序
  3. 魅族Android10内测招募答案,魅族安卓10内测招募答案|魅族启动Flyme 7系统内测招募活动...
  4. ccf:201909-2 小明种苹果(续)
  5. iphone 恒屏和自动旋转
  6. 阿里云入门使用教程(新手指南)
  7. EXCEL——单元格内输入回车符
  8. python 视频字符画_python图像、视频转字符画
  9. AfxMessageBox和MessageBox区别
  10. 安卓AlertDialog弹窗