一、基本介绍

**冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。

二、优化前的代码

package cn.zzw.algorithm.sort1;import java.util.Arrays;public class BubbleSort {public static void main(String[] args) {int[] array={9,8,3,6,5,4};BubbleSort(array);}public static void BubbleSort(int array[]){for (int i = 0; i < array.length-1; i++){for(int j=0;j<array.length-1-i;j++){if(array[j]>array[j+1]){int temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}System.out.println("第"+(i+1)+"趟排序结果为:");System.out.println(Arrays.toString(array));}System.out.println("=====================");System.out.println("最终的排序的结果为"+ Arrays.toString(array));}}

测试结果:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=20309:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\1\IdeaProjects\algorithm\out\production\algorithm" cn.zzw.algorithm.sort1.BubbleSort
第1趟排序结果为:
[8, 3, 6, 5, 4, 9]
第2趟排序结果为:
[3, 6, 5, 4, 8, 9]
第3趟排序结果为:
[3, 5, 4, 6, 8, 9]
第4趟排序结果为:
[3, 4, 5, 6, 8, 9]
第5趟排序结果为:
[3, 4, 5, 6, 8, 9]
=====================
最终的排序的结果为[3, 4, 5, 6, 8, 9]Process finished with exit code 0

三、冒泡排序算法的优化

因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换,从而减少不必要的比较。

如果我们发现在某趟排序中,没有发生一次交换, 可以提前结束冒泡排序,这个就是优化。

四、优化后的代码

package cn.zzw.algorithm.sort1;import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;public class BubbleSort {public static void main(String[] args) {int[] array={9,8,3,6,5,4};BubbleSort(array);/*测试80000个数据冒泡排序所用的时间int[] arr=new int[80000];for (int i = 0; i < 80000; i++) {arr[i]=(int)(Math.random()*800000);}Date date1=new Date();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format1 = simpleDateFormat.format(date1);System.out.println("排序前的时间是:"+format1);BubbleSort(arr);Date date2=new Date();String format2 = simpleDateFormat.format(date2);System.out.println("排序前的时间是:"+format2);*/}public static void BubbleSort(int array[]){boolean flag=false;for (int i = 0; i < array.length-1; i++){for(int j=0;j<array.length-1-i;j++){if(array[j]>array[j+1]){flag=true;int temp=array[j];array[j]=array[j+1];array[j+1]=temp;}}if(!flag){break;}else{flag=false;}System.out.println("第"+(i+1)+"趟排序结果为:");System.out.println(Arrays.toString(array));}System.out.println("=====================");System.out.println("最终的排序的结果为"+ Arrays.toString(array));}}

测试结果:

"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=22975:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\1\IdeaProjects\algorithm\out\production\algorithm" cn.zzw.algorithm.sort1.BubbleSort
第1趟排序结果为:
[8, 3, 6, 5, 4, 9]
第2趟排序结果为:
[3, 6, 5, 4, 8, 9]
第3趟排序结果为:
[3, 5, 4, 6, 8, 9]
第4趟排序结果为:
[3, 4, 5, 6, 8, 9]
=====================
最终的排序的结果为[3, 4, 5, 6, 8, 9]Process finished with exit code 0
排序前的时间是:2021-02-08 22:16:31
排序前的时间是:2021-02-08 22:16:45

十三、冒泡排序算法及其优化相关推荐

  1. 【十大排序算法】(一)冒泡排序算法(优化)

    一.优化第一版 优化第一版是针对类似 int[] arr = {3,2,1,4,5,6,7,8,9; 这样的有很多已经排好序的数组,为了不让它做无用的循环,对于此场景进行的优化,优化代码如下: // ...

  2. 冒泡排序算法以及优化

    什么是冒泡排序呢?冒泡排序的英语名是Bubble Sort,是一种最基础的交换排序. 大家一定都喝过汽水吧,汽水中常常有许多小小的气泡,往上飘,这是因为组成小气泡的二氧化碳比水要轻,所以小气泡才会一点 ...

  3. 经典排序算法----冒泡排序算法及其优化(稳定)

    冒泡排序(稳定) 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,我想你是不会再无聊地把他们俩交换一下的:如果两个相等的 ...

  4. java 冒泡排序算法优化

    1.冒泡排序优化思想 在文章<JAVA实现冒泡排序算法>中,我们用常规算法实现了冒泡排序,在此篇中,我们对冒泡排序算法进行优化,思想如下:引入一个标志位,默认为true,如果本次或者本趟遍 ...

  5. 排序算法——1冒泡排序算法

    一.冒泡排序常规算法: 冒泡排序原理:比较相邻两元素,将值大的交换到右边(从小到大排序,也可从大到小排序): 步骤: (1)第一趟第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面. ...

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

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

  7. 排序算法:冒泡排序算法优化实现及分析

    冒泡排序算法介绍 冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序记录为止.这是书上的定义,感觉太弯弯肠子了.冒泡排序是几乎所有学 ...

  8. BubbleSort 优化后的冒泡排序算法

    优化后的冒泡排序算法: 在刚开始写的时候,遇到想用size_t(即unsigned int)来表示数组索引,但是在进行比较时,j出现溢出,最后用int型来表示~ 注意点在注释中写明 若为基本有序的情况 ...

  9. JAVA冒泡排序算法(含详细过程代码讲解及优化)

    冒泡排序算法拆分讲解及优化 java冒泡排序 一.代码的拆分讲解 从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可. 二.冒泡排序的代码 优 ...

最新文章

  1. Python计算机视觉——照相机模型与增强现实
  2. 前、后端分离权限控制设计和实现思路
  3. MIT出品2017-2018深度学习最新进展汇总
  4. 第一期站立会议2(11.16个人)
  5. PAT (Basic Level) 1044 火星数字(模拟)
  6. delphi XE4 隐藏程序在任务管理器和隐藏任务栏
  7. codeblocks使用技巧
  8. Cannot create PoolableConnectionFactory。创建连接池异常
  9. 困计算机无法启动adb,win7系统无法启动adb.exe工具包的解决方法
  10. Linux运维系统工程师系列---17
  11. python100例详解-Python编程之属性和方法实例详解
  12. python 百度ai json解析_百度AI识别调用的简单例子
  13. 计算机操作系统(第3版)课后习题答案(完整版)
  14. android traceview工具,[Android]Android TraceView工具使用
  15. 【FPGA】精品FPGA书籍推荐
  16. DM manager工具使用
  17. mentohust mac安装
  18. zui php,ZUI前端html5框架 php版 v1.9.1
  19. matlab绿屏抠像代码,DV影像素材抠像效果研究
  20. 310569138 294609417 297440781 猪八戒上的骗子

热门文章

  1. OpenCV学习笔记1
  2. NAACL| 基于标签感知的双迁移学习在医学命名实体识别中的应用
  3. 北京、广州同时开课 | 临床基因组学数据分析实战助力解析Case,快速发表文章...
  4. Nature子刊封面:浙大王蒙岑组揭示水稻种子内生菌抗病新功能
  5. 【不容错过】12月10日:纳米孔测序科研团队大会NCM 2020亚太区特别专场
  6. python求投影距离_python实现高斯投影正反算方式
  7. R语言构建xgboost模型:xgb.cv函数交叉验证确定模型的最优子树个数(可视化交叉验证对数损失函数与xgboost模型子树个数的关系)、交叉验证获取最优子树之后构建最优xgboost模型
  8. R语言eval函数评估表达式或者字符串实战
  9. conda创建子环境并注册kernel
  10. 潜在狄利克雷分配(LDA,Latent Dirichlet Allocation)模型(一)