java冒泡排序真正最优的优化方案
最近复习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冒泡排序真正最优的优化方案相关推荐
- 人人都能掌握的Java服务端性能优化方案
转载自 人人都能掌握的Java服务端性能优化方案 作为一个Java后端开发,我们写出的大部分代码都决定着用户的使用体验.如果我们的代码性能不好,那么用户在访问我们的网站时就要浪费一些时间等待服务器的响 ...
- 《Java后端性能调优实战方案手册》,看完至少阿里P7
之前有朋友说,"我们公司的系统从来都没有经过性能调优,集成测试没问题后就上线了,上线后也几乎没出现过性能问题."其实没遇到性能问题不代表程序不存在性能问题,只能说明系统的访问量有点 ...
- 性能调优之Java系统级性能监控及优化
性能调优之Java系统级性能监控及优化 对于性能调优而言,通常我们需要经过以下三个步骤:1,性能监控:2,性能剖析:3,性能调优 性能调优:通过分析影响Application性能问题根源,进行优化Ap ...
- mybatis与mysql调优_MySQL + mybatis的SQL优化方案
sql优化方案: 1.添加索引,在条件参数,关联参数上建立参数, 2.字段优化,需要什么字段查什么字段 3.模糊查询尽量使用: select * from tableName a where a.na ...
- react性能优化方案_React灵敏且性能卓越的Spray + Akka解决方案,以“在Java和Node.js中发挥并发性和性能”...
react性能优化方案 在我以前的文章中,我研究了一个虚拟的交易引擎,并将基于Java的阻止解决方案与基于Node.js的非阻止解决方案进行了比较. 在文章的结尾,我写道: 我怀疑随着Node.js的 ...
- c++ using 前置声明_每日优鲜前置仓模式的配货优化方案案例介绍
大渔导读:2019 年零售业供应链最佳实践大奖--银奖 基于每日优鲜前置仓模式的配货优化方案案例:1. 背景介绍: 每日优鲜成立于 2014 年 11 月,是专注于优质生鲜的移动电商,已在北上广深等 ...
- 第十三届蓝桥杯省赛 Java A 组 I 题、Python A 组 I 题、Python B 组 J 题——最优清零方案(AC)
1.最优清零方案 1.题意描述 给定一个长度为 NNN 的数列 A1,A2,⋯,ANA_1,A_2,⋯,A_NA1,A2,⋯,AN .现在小蓝想通过若干次操作将 这个数列中每个数字清零. 每次操 ...
- java同步锁优化方案学习笔记(偏向锁,轻量级锁,自旋锁,重量级锁)
目录 一,概述 二,CAS算法 三,Java对象的对象头,以及Mark Word 四,偏向锁 Baised Lock 五,轻量级锁 六,自旋锁 SpinLock 七,重量级锁 八,在应用层提高锁效率的 ...
- JAVA冒泡排序算法(含详细过程代码讲解及优化)
冒泡排序算法拆分讲解及优化 java冒泡排序 一.代码的拆分讲解 从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可. 二.冒泡排序的代码 优 ...
最新文章
- 图像卷积与滤波知识点整理(1)
- JAVA学习(十)__MessageFormat用法
- html jq 控制显示密码,js、jquery分别实现点击密码输入框密码显示和隐藏
- Chrome 开发工具 Workspace 使用
- 《TensorFlow技术解析与实战》——第3章 可视化TensorFlow
- Strike price
- (8)Linux(客户端)和Windows(服务端)下socket通信实例
- 科来网络分析系统与数据包分析
- 前端获取文件的MD5值
- The IMAP server replied to the 'EXAMINE' command with a 'NO' response: EXAMINE Unsafe Login.
- 利用python构建马科维茨_Python_画马科维茨有效前沿
- sudo chmod -R 777
- 银联商务MISPOS接口开发demo 需要调用POSINF.DLL
- 关于计算机培训策划案,2019年计算机培训策划书.docx
- 商汤科技2018年校招
- which的用法总结c语言,which的用法
- Windows驱动中的inf文件
- 合工大与安大的计算机科学与技术好,计算机考研安徽大学和合工大两所学校哪个好?...
- 那么辛苦的熬单片机,不拿它DIY点小玩意怎么对得起自己。
- 【Pytorch】torch.argmax 函数详解