最近,笔者学习了冒泡排序,在此简单分享一下。

冒泡排序的原理:
        对于一个数组,冒泡排序算法会比较相邻的两项的大小,并进行交换。

对每一对相邻的元素做同样的调整,如:第一个和第二个,第二个和第三个,第三个和第四个等等,以此类推。这样下来,最后的元素会是最大的。

重复以上步骤。如果有n个元素,则第一次循环进行n-1次,第二次循环进行n-2次,…………,第n-j次循环过后,会按大小顺序排出j个较大的数。

持续以上的步骤,直到没有任何一堆数字需要比较。

冒泡原理的简单应用:
        任务:排序:4,9,10,5,7

时间复杂度与空间复杂度

时间复杂度:时间复杂度是一个函数,定量描述了算法的运算时间,用大O符号来表示。在计算的时候,先找出算法基本操作的执行次数,即为T(n),然后找到它的同数量级,即为f(n),如果T(n)与f(n)的比值求极限可得到一个常数c,那么时间复杂度T(n)=O(f(n))。

上面的冒泡排序的时间复杂度计算(计算下方的for循环):T(n) = (4n+1)n,f(n) = n*n,c = 4,则时间复杂度为:T(n) = O(n*n)

空间复杂度:空间复杂度是运行完一个程序所需要的内存的大小。这里包括了存储算法本身所需要的空间,输入与输出数据所占空间,以及一些临时变量(比如上面的h)所占用的空间。一般而言,我们只比较额外空间,来比较算法的空间优越性。

上面的冒泡排序的临时变量所占空间不随处理数据n的大小改变而改变,则空间复杂度为O(1)。

优化冒泡排序:

如果给出的数据为1,2,3,4,5,6,7,9,8,要求进行排序,那么只需要进行一次交换即可。但此时程序仍然会继续检测到1为止。此时需要进行优化。

以上如果有表述不当之处,还请指出更正!

2017-8-20   上午

折叠

Java菜鸟教程 冒泡排序,时间复杂度和空间复杂度相关推荐

  1. Java菜鸟教程系列 学习笔记总结 基础篇(1)

    基础语法 本博客通过学习菜鸟教程Java专栏,并整理得出的Java基础知识. 命名规范 1.项目名全部小写 2.包名全部小写 3.类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写.如: ...

  2. Java菜鸟教程笔记

    参考:http://www.runoob.com/java/java-tutorial.html Java 基本数据类型 内置数据类型 引用类型 Java 变量类型 Java 局部变量 实例变量 类变 ...

  3. Java菜鸟教程math类_Java Number Math 类

    Java 中 int 和 Integer 的区别 1. int 是基本数据类型,int 变量存储的是数值.Integer 是引用类型,实际是一个对象,Integer 存储的是引用对象的地址. 2. I ...

  4. Java程序员必看经典书籍,助你早日打通任督二脉,Java菜鸟教程视频

    一.Java四大神兽,神兽在手,天下我有! 1.<Java核心技术卷一> 唯一可以和<Java编程思想>媲美的一本Java入门书籍.单从技术的角度来看,前者更好一些.但上升到思 ...

  5. Java菜鸟教程系列 学习笔记总结 面向对象篇(1)

    继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为. 继承的特性 子类拥有父类非 private 的属性.方法. 子类 ...

  6. java菜鸟教程多态,已开源下载

    蚂蚁金服关于spring部分面试问题: Spring bean的生命周期能不能结合源码回答一下这个问题 Spring容器当中包含了哪些常用组件(至少说5个),作用是什么,场景是什么: Spring自动 ...

  7. 菜鸟教程中Java语法(Java教程+Java面向对象)

    Java基本数据类型 Java变量类型 Java运算符 Java循环语句 Java条件语句 Java switch case Java Number & Math类 Java Characte ...

  8. java 方法_Java 方法 | 菜鸟教程

    Java 方法 在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢? println() 是一个方法. System 是系统类. out 是标准输出对象. 这句话 ...

  9. 手机上的python编辑器_菜鸟教程在线编辑器|菜鸟教程app手机版下载(html/java/python3)v1.0-乐游网安卓下载...

    <菜鸟教程app手机版>是一款为想要学习编程的朋友们打造的在线学习和编辑的软件,菜鸟教程app中有着html.java.C++等众多不同的编程语言可以学习,软件还自带编辑功能,有着java ...

最新文章

  1. 真没想到中国有这么猛的软件,杀伤力太强了!
  2. python小细节之else
  3. 浅析Hadoop的三个作业调度器
  4. JAVA如何隐藏异常堆栈_java – 如何在控制台上停止打印异常堆栈跟踪?
  5. Android开发--apk的生成
  6. 08_提升方法Boosting2_统计学习方法
  7. vnpy软件架构分析
  8. 八、Linux文本编辑器vim/vi
  9. Spring源码解析一(框架梳理)
  10. AUTOCAD——形位公差如何标注、CAD打断于点的操作
  11. 全国哀悼日,黑白网页CSS滤镜代码
  12. 爬取分析拉勾网招聘信息
  13. HE4484E泛海微5V USB 输入双节锂电池串联应用升压充电IC管理芯片
  14. matlab分组形式条形图,Matplotlib带标签的分组条形图
  15. 使用SSM为学校医务室开发一套管理系统
  16. QT The inferior stopped because it received a signal from the operating system.
  17. 佐藤ひろ美 - わたしのそらのいろ
  18. FPGA三大串行通信接口之UART
  19. 测试环境Hosts设置
  20. 微分法MATLAB语言程序,matlab微积分运算命令与例题pdf

热门文章

  1. EasyCVR视频通道名称出现乱码是什么原因导致的?如何修复?
  2. mysql5.7忘记root密码解决方法,mysql5.7忘记root密码完美解决方案
  3. jquery中国地图热点提示信息,可作链接特效
  4. cjt意思_cjts的含义,cjts是什么的缩写,cjts的词语,cjts代表的意思
  5. 划重点!选择收银软件必须注意的四大要点
  6. 简单返回顶部代码及注释说明(转)
  7. CCNA《官方教材》PPT中文版及“绝版”配套实验下载
  8. __init__的用法
  9. SSM毕设项目基于web的在线订餐系统sbh8k(java+VUE+Mybatis+Maven+Mysql)
  10. 音视频开发 RTMP协议发送H.264编码及AAC编码的音视频(C++实现)