冒泡及改进(java实现)
来源:互联网 发布:淘宝网购物怎么付款 编辑:程序博客网 时间:2024/05/22 10:39
冒泡排序java实现
冒泡核心就是两层for。
冒泡就是从数组的第一位开始比较大的放后面,小的放前面(从小到大排序),所以每一次循环结束,总是数组中最大的,在最后面。外层的for循环,就是将内层每次最大的数排除在外。下面是简单的java实现。
public class BubbleSort { public static void main(String[] args) { double[] density = {0.697,0.774,0.634,0.608,0.556,0.403,0.481,0.437, 0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719}; BSort sort = new BSort(density); sort.show(); sort.sort(); sort.show(); }}class BSort { private double[] density; private double temp = 0; BSort(double[] density) { this.density = density; } public void sort() { int j; for(int i=density.length-1; i>=0; i--) { for(j=0; j<i; j++) { if (density[j+1] < density[j]) { temp = density[j]; density[j] = density[j+1]; density[j+1] = temp; } } } } public void show() { for(int i=0; i<density.length; i++) { System.out.print(density[i] + " "); } System.out.println(" "); }}
第一次改进
下面是第一次改进的代码(改进的:当数组排序完成则结束排序,即跳出for),下面注释掉的是计算程序运行时间的,可惜每个程序的运行时间都太短了,每次输出都是0ms。
public class ImprovedBubbleSort { public static void main(String[] args) { double[] density = {0.697,0.774,0.634,0.608,0.556,0.403,0.481,0.437, 0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719}; BSort sort = new BSort(density); sort.show();// long begin = System.currentTimeMillis(); sort.sort();// long end = System.currentTimeMillis();// long spendTime = end - begin; sort.show();// System.out.println("程序的开始时间为:"+begin+" 程序的结束时间为" + end+ " 程序运行时间为:" + spendTime); }}class Sort { private double[] density; private double temp = 0; boolean flag = false; //标记,如果内部的循环没用没用交换,则数组已排序完成 Sort(double[] density) { this.density = density; } public void sort() { int j; for(int i=density.length-1; i>=0; i--) { for(j=0; j<i; j++) { if(density[j+1] < density[j]) { flag = true; temp = density[j]; density[j] = density[j+1]; density[j+1] = temp; } } if(flag) { break; } } } public void show() { for(int i=0; i<density.length; i++) { System.out.print(density[i] + " "); } System.out.println(" "); }}
第二次改进
第二次改进:需定义变量lastExchange表示上次循环中最后一次交换的位置。冒泡排序最后一次交换位置后面的区域是有序且全部大于前面区域的,所以排序时需要排除掉这些,但是在外层循环中修改i–有困难,所以就修改内层循环的判断条件,将j
public class SecondImprovedBubbleSort { public static void main(String[] args) { double[] density = {0.697,0.774,0.634,0.608,0.556,0.403,0.481,0.437, 0.666,0.243,0.245,0.343,0.639,0.657,0.360,0.593,0.719}; BSort sort = new BSort(density); sort.show(); sort.sort(); sort.show(); }}class SISort { private double[] density; private double temp = 0; private boolean flag = false; //标记,如果内部的循环没用没用交换,则数组已排序完成 private int lastSwap = density.length-1; //标记最后一次交换的位置,此位置之后的全为有序且大于之前,所以排除在下次排序之外 SISort(double[] density) { this.density = density; } public void sort() { int j; for(int i=density.length-1; i>=0; i--) { for(j=0; j<lastSwap; j++) { if(density[j+1] < density[j]) { flag = true; temp = density[j]; density[j] = density[j+1]; density[j+1] = temp; lastSwap = j; } } if(flag) { break; } } } public void show() { for(int i=0; i<density.length; i++) { System.out.print(density[i] + " "); } System.out.println(" "); }}
1 0
- 冒泡及改进(java实现)
- Java 冒泡排序及改进
- 冒泡法及其改进的java实现
- 【常用排序算法】冒泡排序与冒泡排序优化改进(Java实现)
- 冒泡排序及改进(C++版)
- 冒泡排序实现及优化(Java)
- 排序算法(一):冒泡算法的两种基本实现及改进
- C++冒泡排序(包含初级、正宗及改进三种实现)
- 冒泡排序及Java实现
- [java]冒泡排序的常规、改进以及递归实现
- 冒泡排序及改进版
- 冒泡算法及改进(属于交换排序)
- 排序算法(一)——冒泡排序及改进
- 数据结构之排序算法(二)-冒泡排序及改进
- 排序算法(一)——冒泡排序及改进
- 排序算法(一)——冒泡排序及改进
- java 冒泡排序及其改进
- Java 冒泡排序及其改进
- Spring注解@Component、@Repository、@Service、@Controller区别
- 精通 CSS+DIV 网页样式与布局 92
- SQL Server T-SQL高级查询
- [NodeJS] Mongoose Populate 基本使用
- 个人建站中服务器的选择购买及对应系统的选择
- 冒泡及改进(java实现)
- 检测Android应用的启动与关闭
- 精通 CSS+DIV 网页样式与布局 93
- webservice调用方式
- laravel 表单和HTML扩展包
- Web API with ASP.NET Core 1.0 MVC
- 调试技巧之 找准调试点
- 精通 CSS+DIV 网页样式与布局 94
- java编程笔记