冒泡排序,冒泡性能优化--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 ...
随机推荐
- Mysql(Linux服务器)root用户密码忘记重置方法
MySQL是非常常见的开源数据库,使用者众多,若是不小心忘记了安装在服务器的mysql密码,无法登陆,应该如何重置呢?方法很简单,现在和大家分享下.(系统环境:CentOs 6.5 软件:Mysql ...
- mybatis 日期查询datetime
<select id="getHistoryDataByDate" parameterType="java.util.HashMap" resultTyp ...
- [转载]sscanf函数
来源:http://c.biancheng.net/cpp/html/296.html 头文件:#include <stdio.h> sscanf()函数用于从字符串中读取指定格式的数据, ...
- opencv-Haar特征
特征,判决,得到判决 1.什么是haar特征? 特征 = 某个区域的像素点经过某种四则运算之后得到的结果. 这个结果可以是一个具体的值也可以是一个向量,矩阵,多维.实际上就是矩阵运算 2.如何利用特征 ...
- nginx+uwsgi01---flask部署
1.uwsgi.ini [uwsgi] # uwsgi 启动时所使用的地址与端口注意socket与http不同,http可以被外网访问0. socket = # 指向网站目录 chdir = /hom ...
- Ubuntu 16.04设置root用户登录图形界面
ubuntu桌面版默认不开启root登录,所以需要进行设置, 可以参考博客 https://www.linuxidc.com/Linux/2017-01/139094.htm
- node.js 设置 淘宝 镜像
npm config set registry "https://registry.npm.taobao.org" npm info underscore (如果上面配置正确这个命 ...
- Canvas制作动态进度加载水球
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C语言中复杂的声明
C允许用户自定义数据形式. 虽然我们常用一些简单的数据形式,但是根据需要有时候会用到复杂的形式. 那么久会涉及定义一些复杂的声明.定义复杂声明之前,就必须能看懂复杂的声明. 这就需要了解一些规则和约定 ...
- Github常见命令整理
常见命令: 将文件增加到index/stage暂存区: git add filename 将暂存的文件更新到本地库中:git commit -m "备注内容" 将本地库更新到远程库 ...