冒泡排序,冒泡性能优化--java实现
冒泡排序说明:
一次比较两个元素,如果他们的顺序错误就把他们交换过来。
重复地进行直到没有再需要交换,也就是说已经排序完成。
越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
简单的冒泡排序代码:
import java.util.Arrays; /**
* 实现冒泡排序
* @author dell
*
*/
public class BubbleSort { public static void main(String[] args) {
int[] arr = {1,200,19,55,10,22,3,7};
//API实现
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//冒泡实现
int temp;
for(int i =0;i<arr.length-1;i++){
for(int j = 0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
冒泡排序的性能分析和算法优化(外层循环优化)
问题:
有的冒泡经过第一轮的交换已经是有序的了,如:2 1 3 4。数据越多的时候越慢,非常不适合大数据的排序
解决办法
如果用一个flag来判断一下,当前数组是否已经有序,如果有序就退出循环,这样可以明显的提高冒泡排序的性能。
package bubbleSort; import java.util.Arrays; import org.junit.Test; /**
* 冒泡排序的性能分析和算法优化(外层循环优化)
* @author dell
*
*/
public class BubbeSort02 { @Test
public void test1(){
boolean flag = true;
int[] arr = {2,1,3,4,5};
int temp;
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
flag=false;
}
}
if(!flag){
//没有发生交换则退出循环;
break;
}
}
System.out.println(Arrays.toString(arr));
}
}
冒泡排序第二种优化(内层循环优化)
/**
* 冒泡排序的性能分析和算法优化(内层循环优化)
*/
@Test
public void test2(){ int[] arr = {22,1,10,5}; //标记最后一次交换的位置 for (int i = 0; i < arr.length-1; i++) {
int flag = 0;
int temp;
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
//当位置发生改变,flag的值就发生变化
flag=1;
}
}
//判断标志位flag有没有发生变化,没有就直接结束内层循环
if(flag==0){
return;
}
}
System.out.println(Arrays.toString(arr));
}
}
参考链接
http://blog.csdn.net/pzhtpf/article/details/7560294
http://www.jianshu.com/p/ffcf5f97bc36
冒泡排序,冒泡性能优化--java实现的更多相关文章
- 性能优化 java 24 次阅读 · 读完需要 15 分钟 0
摘要: 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也会体现在优秀程序员在工作效率提升.产品性能优化和用户体验改善等小技巧方面的分享,以提高我们的 ...
- JVM性能优化--Java的垃圾回收机制
一.Java内存结构 1.Java堆(Java Heap) java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例 ...
- HBase性能优化 Java Api
1. 使用“连接池” 如果每次和Hbase交互时都去新建连接的话,显然是低效率的,HBase也提供类连接池相关的API. 1.1. HTablePool 早期的API中使用它,但很不幸,现在它已经过时 ...
- 【Java】Java-正则匹配-性能优化
Java-正则匹配-性能优化 Java 正则 点_百度搜索 在Java类中如何用正则表达式表示小数点啊?_百度知道 使用Jakarta-ORO库的几个例子 - 小橡树 - ITeye博客 正则表达式以 ...
- Java程序性能优化Tip
本博客是阅读<java time and space performance tips>这本小书后整理的读书笔记性质博客,增加了几个测试代码,代码可以在此下载:java时空间性能优化测试代 ...
- Java 性能优化之 String 篇
原文:http://www.ibm.com/developerworks/cn/java/j-lo-optmizestring/ Java 性能优化之 String 篇 String 方法用于文本分析 ...
- Java内存模型及性能优化
最近在做一个项目的性能优化,遇到好多以前没有关注过的性能问题,一头雾水,今天做个笔记,简单记录下JVM相关的参数设置. 一.JVM内存模型 首先介绍下Java程序具体执行的过程: Java源代码文件( ...
- java 性能优化(代码优化)
参考博文: java 性能优化:35 个小细节,让你提升 java 代码的运行效率
- Java程序性能优化技巧
Java程序性能优化技巧 多线程.集合.网络编程.内存优化.缓冲..spring.设计模式.软件工程.编程思想 1.生成对象时,合理分配空间和大小new ArrayList(100); 2.优化for ...
随机推荐
- loj #6077. 「2017 山东一轮集训 Day7」逆序对
#6077. 「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k n, kn,k,请求出长度为 n nn 的逆序对数恰好为 k kk 的排列的个数.答案对 109+7 10 ^ 9 ...
- 洛谷P4137 Rmq Problem / mex(莫队)
题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. 第二行为n个数. 从第三行开始,每行一个询问l, ...
- for别名
name:for(int i =0 ;i< a.length;i++){ System.out.println(i); for(int j =0;j<i;j++){ continue na ...
- [Leetcode]016. 3Sum Closest
public class Solution { public int threeSumClosest(int[] num, int target) { int result = num[0] + nu ...
- kibana启动调试
在windows的命令行窗口中,将路径制定到kibana的源代码bin目录中,然后执行 kibana.bat --dev --no-base-path 需要注意的是kibana.yml中的配置文件需要 ...
- Windows安装redis数据库以及集群部署
1. 安装Redis版本:win-3.0.501https://github.com/MSOpenTech/redis/releases页面有,我下载的是zip版本的:Redis-x64-3.0.50 ...
- linux开机启动服务学习chkconfig命令
选项: --add:增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据: --del:删除所指定的系统服务,不再由chkconfig指令管理,并同时在系 ...
- 解决Yii2 添加css后页面刷新也无反应的情况
'assetManager' => [ // uncomment the following line if you want to auto update your assets (unix ...
- OfficeControl插件的用法
项目中需要用到文档在线编辑的功能,网上找到这篇文章: http://hi.baidu.com/hurtingwings/item/bf83b6343305a94e3075a19e
- JS Date 时间格式化
Date2Str(x, y) { , d: x.getDate(), h: x.getHours(), m: x.getMinutes(), s: x.getSeconds() }; y = y.re ...