它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。(来自:百度百科)
package learning; import java.util.Arrays; /** * 冒泡排序 * @author Lee * */ public class TestSort { public static void main(String[] args) { int[] a= {1,3,5,7,2,8,4}; System.out.println("排序前:"+Arrays.toString(a)); // Arrays.sort(a); // System.out.println("排序后:"+Arrays.toString(a)); System.out.println("#############"); bubbleSort(a); System.out.println("冒泡排序后:"+Arrays.toString(a)); } public static void bubbleSort(int[] a) { int temp=0; for(int i=0;i<a.length;i++) { System.out.println(i+1+":"+Arrays.toString(a)); for(int j=0;j<a.length-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } }
打印输出结果:
排序前:[1, 3, 5, 7, 2, 8, 4] ############# 1:[1, 3, 5, 7, 2, 8, 4] 2:[1, 3, 5, 2, 7, 4, 8] 3:[1, 3, 2, 5, 4, 7, 8] 4:[1, 2, 3, 4, 5, 7, 8] 5:[1, 2, 3, 4, 5, 7, 8] 6:[1, 2, 3, 4, 5, 7, 8] 7:[1, 2, 3, 4, 5, 7, 8] 冒泡排序后:[1, 2, 3, 4, 5, 7, 8]
可以从结果中看出,第4步已经出结果了。
优化过程:
package learning; import java.util.Arrays; /** * 冒泡排序 * @author Lee * */ public class TestSort { public static void main(String[] args) { int[] a= {1,3,5,7,2,8,4}; System.out.println("排序前:"+Arrays.toString(a)); // Arrays.sort(a); // System.out.println("排序后:"+Arrays.toString(a)); System.out.println("#############"); bubbleSort(a); System.out.println("冒泡排序后:"+Arrays.toString(a)); } public static void bubbleSort(int[] a) { int temp=0; for(int i=0;i<a.length;i++) { System.out.println(i+1+":"+Arrays.toString(a));//i为序列,从0开始 boolean order = true; //定义判断是否达到有序条件的变量order for(int j=0;j<a.length-1;j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; order=false; //交换了位置,数组无序 } } if(order/*==true*/) { break; //循环结束,判断如果order==true;结束循环 } } } }
优化结果显示:
排序前:[1, 3, 5, 7, 2, 8, 4] ############# 1:[1, 3, 5, 7, 2, 8, 4] 2:[1, 3, 5, 2, 7, 4, 8] 3:[1, 3, 2, 5, 4, 7, 8] 4:[1, 2, 3, 4, 5, 7, 8] 冒泡排序后:[1, 2, 3, 4, 5, 7, 8]
来源:https://www.cnblogs.com/silly-bird/p/10325914.html