最近复习java,复习到排序,关于冒泡排序算法的优化,网上的优化没怎么看到有考虑到一个最优化的情况,大都只是加一个flag判断是否发生过交换,没有发生交换则退出循环这样子。

代码如下:

1.未优化过的冒泡排序:

public static int[]  sortLow(int[] arr){for (int i = 1; i < arr.length; i++) {  //第一层for循环,用来控制冒泡的次数for (int j = 0; j < arr.length-1; j++) { //第二层for循环,用来控制冒泡一层层到最后//如果前一个数比后一个数大,两者调换 ,意味着泡泡向上走了一层if (arr[j] > arr[j+1] ){int temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}return arr;}

2.网上大部分(最优)优化 :

    /*** 冒泡排序优化* 加入一个布尔变量,如果内循环没有交换值,说明已经排序完成,提前终止*/public static int[] sortPlus(int[] arr){if(arr != null && arr.length > 1){for(int i = 0; i < arr.length - 1; i++){// 初始化一个布尔值boolean flag = true;for(int j = 0; j < arr.length - i - 1 ; j++){if(arr[j] > arr[j+1]){// 调换int temp;temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;// 改变flagflag = false;}}if(flag){//如果没有发生交换,则已经有序,退出break;}}}return arr;}

3.个人觉得真正的最优:(如果有更优方案,欢迎讨论留言)

    /*** 冒泡排序优化2 最优解* 优化比较的次数。* 记录最后一次发生交换的位置,此位置后已经有序,不需要继续比较* @param arr*/public static int[] sort(int[] arr){if(arr != null && arr.length > 1){int k=arr.length-1;//初始化第一趟排序的遍历范围while(k>0){//一趟中没有发生交换,代表全部有序,k则为0,退出循环.int emp=0;//初始化一个记录交换位置的变量for(int j = 0; j < k ; j++){//每趟比较至上一次最后交换的位置,因为后面已经有序不需要比较if(arr[j] > arr[j+1]){// 调换int temp;temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;emp=j;//记录交换的位置System.out.print(j);}}k=emp;//最后交换位置赋值给k,以便循环判断,减少趟数}}return arr;}

java冒泡排序真正最优的优化方案相关推荐

  1. 人人都能掌握的Java服务端性能优化方案

    转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...

  2. 《Java后端性能调优实战方案手册》,看完至少阿里P7

    之前有朋友说,"我们公司的系统从来都没有经过性能调优,集成测试没问题后就上线了,上线后也几乎没出现过性能问题."其实没遇到性能问题不代表程序不存在性能问题,只能说明系统的访问量有点 ...

  3. 性能调优之Java系统级性能监控及优化

    性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化Ap ...

  4. mybatis与mysql调优_MySQL + mybatis的SQL优化方案

    sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...

  5. react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...

    react性能优化方案 在我以前的文章中,我研究了一个虚拟的交易引擎,并将基于Java的阻止解决方案与基于Node.js的非阻止解决方案进行了比较. 在文章的结尾,我写道: 我怀疑随着Node.js的 ...

  6. c++ using 前置声明_每日优鲜前置仓模式的配货优化方案案例介绍

    大渔导读:2019 年零售业供应链最佳实践大奖--银奖 基于每日优鲜前置仓模式的配货优化方案案例:1. 背景介绍:  每日优鲜成立于 2014 年 11 月,是专注于优质生鲜的移动电商,已在北上广深等 ...

  7. 第十三届蓝桥杯省赛 Java A 组 I 题、Python A 组 I 题、Python B 组 J 题——最优清零方案(AC)

    1.最优清零方案 1.题意描述 给定一个长度为 NNN 的数列 A1,A2,⋯,ANA_1,A_2,⋯,A_NA1​,A2​,⋯,AN​ .现在小蓝想通过若干次操作将 这个数列中每个数字清零. 每次操 ...

  8. java同步锁优化方案学习笔记(偏向锁,轻量级锁,自旋锁,重量级锁)

    目录 一,概述 二,CAS算法 三,Java对象的对象头,以及Mark Word 四,偏向锁 Baised Lock 五,轻量级锁 六,自旋锁 SpinLock 七,重量级锁 八,在应用层提高锁效率的 ...

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

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

最新文章

  1. 图像卷积与滤波知识点整理(1)
  2. JAVA学习(十)__MessageFormat用法
  3. html jq 控制显示密码,js、jquery分别实现点击密码输入框密码显示和隐藏
  4. Chrome 开发工具 Workspace 使用
  5. 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow
  6. Strike price
  7. (8)Linux(客户端)和Windows(服务端)下socket通信实例
  8. 科来网络分析系统与数据包分析
  9. 前端获取文件的MD5值
  10. The IMAP server replied to the 'EXAMINE' command with a 'NO' response: EXAMINE Unsafe Login.
  11. 利用python构建马科维茨_Python_画马科维茨有效前沿
  12. sudo chmod -R 777
  13. 银联商务MISPOS接口开发demo 需要调用POSINF.DLL
  14. 关于计算机培训策划案,2019年计算机培训策划书.docx
  15. 商汤科技2018年校招
  16. which的用法总结c语言,which的用法
  17. Windows驱动中的inf文件
  18. 合工大与安大的计算机科学与技术好,计算机考研安徽大学和合工大两所学校哪个好?...
  19. 那么辛苦的熬单片机,不拿它DIY点小玩意怎么对得起自己。
  20. 【Pytorch】torch.argmax 函数详解

热门文章

  1. 妙招-好用的优盘数据恢复软件
  2. T568A 与 T568B
  3. html——标签分类
  4. nvme linux raid,04-第4章-NVMe VROC KeyVROC NVMe RAID
  5. windows安装nodejs,在cmd中输入npm提示非内部命令
  6. ati能备份linux格式吗,ATI备份TIB文件的另类用法
  7. 基于RoCE v1配置PFC
  8. 常见的电脑屏幕分辨率统计
  9. 计算机域名管理机构,计算机域怎么填?
  10. 解密微软中间语言:MSIL