【原创】增强版冒泡排序算法-java版
来源:互联网 发布:土耳其人 知乎 编辑:程序博客网 时间:2024/05/01 19:50
原创文章,转载请注明出处。
原理:第N趟循环,如果已经没有移动元素的操作,说明排序已完成,循环应该退出,不必再执行后续的循环操作,因为就算比较也不会再有元素会被移动。增加此控制计数器。控制循环退出。
如下程序,其实第6趟就已经排序完成,没有可移动的元素了。但是还是走了10趟排序。是非常不必要的。
public static void maoPaoSortOld(int []array) { for (int i = 1; i < array.length; i++) { for (int j = 0; j < array.length - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } String arrString =buildStr(array); System.out.println("外层排序结束,第"+i+"轮,元素结构"+arrString); } }
外层排序结束,第1轮,元素结构[4,24,1,3,15,2,60,54,40,45,63]
外层排序结束,第2轮,元素结构[4,1,3,15,2,24,54,40,45,60,63]
外层排序结束,第3轮,元素结构[1,3,4,2,15,24,40,45,54,60,63]
外层排序结束,第4轮,元素结构[1,3,2,4,15,24,40,45,54,60,63]
外层排序结束,第5轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第6轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第7轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第8轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第9轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第10轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
改良后的增强版冒泡排序法:
/** * Created by lirong5 on 2016/6/13. */public class SortTest { public static void main(String[] args) { int []array={63,4,24,1,3,15,2,60,54,40,45}; maoPaoSort(array); } /** * 增强版冒泡排序法,从第cycleCount次开始,没有移动元素位置,即可证明排序完成,退出排序。 * */ public static void maoPaoSort(int []array) { int innerMoveCount = 0;//内层移动元素总次数 for (int i = 1; i < array.length; i++) { boolean flag=true;//第i趟循环,如果有移动元素,更改此值,不可退出外层循环,如无元素被移动,排序已完成。退出循环。 for (int j = 0; j < array.length - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; innerMoveCount++; flag=false; } } String arrString =buildStr(array); System.out.println("外层排序结束,第"+i+"轮,元素结构"+arrString); if(flag){ break; } } System.out.println("总共移动元素次数:"+innerMoveCount); } public static String buildStr(int []array){ String rtnStr = "["; for (int i : array){ rtnStr +=i+","; } return rtnStr.substring(0,rtnStr.length()-1)+"]"; }}
控制台输出:
外层排序结束,第1轮,元素结构[4,24,1,3,15,2,60,54,40,45,63]
外层排序结束,第2轮,元素结构[4,1,3,15,2,24,54,40,45,60,63]
外层排序结束,第3轮,元素结构[1,3,4,2,15,24,40,45,54,60,63]
外层排序结束,第4轮,元素结构[1,3,2,4,15,24,40,45,54,60,63]
外层排序结束,第5轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
外层排序结束,第6轮,元素结构[1,2,3,4,15,24,40,45,54,60,63]
总共移动元素次数:24
- 【原创】增强版冒泡排序算法-java版
- 排序算法之冒泡排序Java版
- 冒泡排序+增强版for循环输出
- 排序算法之----冒泡排序算法(java版)
- #算法排序(Java版)#冒泡排序、选择排序
- 基于冒泡排序的增强型算法
- 常用的排序算法之冒泡排序java版
- 排序算法之冒泡(下沉)排序(js和java版)
- 冒泡排序(java版)
- 冒泡排序 JAVA版
- 冒泡排序(JAVA版)
- Java版冒泡排序
- 冒泡排序java版
- Java版冒泡排序
- java 版冒泡排序
- 冒泡排序-java版
- 冒泡排序--Java版
- 冒泡排序--JAVA版
- 制作简单中转的定时器[settimeout]
- 剑指offer面试题-求整数二进制中1的个数
- 开启软件开发之路
- RabbitMQ (三) 发布/订阅
- SpringBoot之Hypermedia-Driven RESTful Web Service
- 【原创】增强版冒泡排序算法-java版
- 关于安卓的知识点总结
- 负载均衡的方案
- Android入门--Toast五种情形
- Memcached - Base
- iOS 各个型号的尺寸及大小
- android 关于服务的详细深入介绍
- C++析构函数为什么要为虚函数
- java发送http的get、post请求