冒泡算法

编程入门 行业动态 更新时间:2024-10-09 03:28:16

冒泡<a href=https://www.elefans.com/category/jswz/34/1770096.html style=算法"/>

冒泡算法

 

em~冒泡的原理就不重复了,这个百度下就清楚啦。

首先写一版大家都会的冒泡排序代码:

当我们现在需要对数组int array[] = new int[]{2,3,1,323,32,233,23,122,13,4254,232,435,242,453,53};进行排序时,我们最简单的方法就是通过两层for循环遍历判断来进行排序,此时O(n^2) 

public class Bubble {int array[] = new int[]{2,3,1,323,32,233,23,122,13,4254,232,435,242,453,53};public Bubble() {for(int i = 0 ; i < array.length ; i++) {for(int j = 0 ; j < array.length - i - 1 ; j++) {if(array[j]>array[j+1]) {int temp = array[j];array[j] = array[j+1];array[j+1] = temp ;}}}for(int a : array) {System.out.print(a+",");}}public static void main(String[] args) {new Bubble();}
}

而平时我们排序的数组有可能是这样的:int array[] = new int[]{11,1,2,3,4,5,6}; 此时除了11以外的元素已经排好序了。那么对于上面的代码当i=0的时候11已经沉底,数组array[]={1,2,3,4,5,6,11}此时数组已经完成了排序。那么当i>=1的时候array[j]>array[j+1]条件将不会成立。我们可以认为当i=n,对于所有的j ,array[j]>array[j+1]都不成立,则表示数组已经排好序不需要有任何的元素移动了。此时就可以跳出判断。如下代码中O=n,就大大优化了算法的时间

public class Bubble {int array[] = new int[]{11,1,2,3,4,5,6};public Bubble() {for(int i = 0 ; i < array.length ; i++) {boolean isChange = false ;for(int j = 0 ; j < array.length - i - 1 ; j++) {if(array[j]>array[j+1]) {int temp = array[j];array[j] = array[j+1];array[j+1] = temp ;isChange = true ;}}if(!isChange) {System.out.println(i);break ;}}for(int a : array) {System.out.print(a+",");}}public static void main(String[] args) {new Bubble();}
}

然鹅也有这样一种数组int[] array = new int[]{11,12,13,14,15,1}; 前面是已经排好序的,最后一个元素是最小的。按照冒泡排序的规则,第一次排序后array={11,12,13,14,1,15} , 第二次为array={11,12,13,1,14,15} , 第三次为array={11,12,1,13,14,15},第四次为array={11,1,12,13,14,15},最后一次为array={1,11,12,13,14,15},需要遍历到最后一次才能得到结果。对于这样的情况也有一种优化方式。em,业界上管这算法叫做鸡尾酒算法,鸡尾酒算法的原理跟冒泡差不多,只不过是鸡尾酒算法第一轮从左到右冒泡,第二轮从右到左冒泡,第三轮从左到右冒泡...依次循环到n次。

代码如下:

public class Cocktail {int array[] = new int[]{11,12,13,14,1};public void doIt() {for(int i = 0 ; i < array.length ; i++) {boolean isChange = false ;if(i%2==0) {for(int j = 0 ; j < array.length -i- 1 ; j++) {if(array[j]> array[j+1]) {int temp = array[j];array[j] = array[j+1];array[j+1] = temp ;isChange = true ;}}}else {for(int j = array.length-i-1 ; j > 0; j--) {if(array[j-1]> array[j]) {int temp = array[j-1];array[j-1] = array[j];array[j] = temp ;isChange = true ;}}}if(!isChange) {System.out.println(i);break ;}}for(int a : array) {System.out.print(a+",");}}public static void main(String[] args) {Cocktail cocktail = new Cocktail();cocktail.doIt();}}

 

更多推荐

冒泡算法

本文发布于:2024-02-14 07:00:59,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762232.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!