冒泡排序的特色:java
>相鄰位置比較,若是約定從大到小排序,每一輪比較完成,能夠排好一個小的,若是從小到大,每一輪比較完成,能夠在末尾排好一個大的數組
咱們用隨機數組進行比較,把每輪的結果打印出來,就知道,冒泡排序的規律了:dom
package com.ghostwu; import java.util.Random; class MyBubbleSort { private int[] arr; public MyBubbleSort(){ arr = new int[10]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ for( int i = 0; i < arr.length; i++ ){ for( int j = 0; j < ( arr.length - i - 1 ); j++ ){ if( arr[j] > arr[j+1] ) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; } } display( "第" + ( i + 1 ) + "輪的比較結果: " ); } } public void display( String info ){ System.out.println( info ); for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class BubbleSort{ public static void main( String[] args ){ MyBubbleSort bs = new MyBubbleSort(); bs.display( "排序以前:" ); bs.sort(); bs.display( "排序以後:" ); } }
執行結果:spa
ghostwu@dev:~/java/data_struct/sort$ !javac javac -d . BubbleSort.java ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 排序以前: 27 93 9 25 6 98 39 84 56 19 第1輪的比較結果: 27 9 25 6 93 39 84 56 19 98 第2輪的比較結果: 9 25 6 27 39 84 56 19 93 98 第3輪的比較結果: 9 6 25 27 39 56 19 84 93 98 第4輪的比較結果: 6 9 25 27 39 19 56 84 93 98 第5輪的比較結果: 6 9 25 27 19 39 56 84 93 98 第6輪的比較結果: 6 9 25 19 27 39 56 84 93 98 第7輪的比較結果: 6 9 19 25 27 39 56 84 93 98 第8輪的比較結果: 6 9 19 25 27 39 56 84 93 98 第9輪的比較結果: 6 9 19 25 27 39 56 84 93 98 第10輪的比較結果: 6 9 19 25 27 39 56 84 93 98 排序以後: 6 9 19 25 27 39 56 84 93 98
從上面的結果,能夠看出,第7輪已經排好序了。後面的3輪徹底沒有必要,浪費CPU的計算時間,因此,咱們能夠完善一下上面的程序,用一個變量來標記,是否已經排好序了。code
改進後的程序:blog
package com.ghostwu; import java.util.Random; class MyBubbleSort { private int[] arr; public MyBubbleSort(){ arr = new int[10]; Random rand = new Random(); for( int i = 0; i < arr.length; i++ ){ arr[i] = rand.nextInt( 101 ); } } public void sort(){ boolean flag = true; for( int i = 0; i < arr.length; i++ ){ flag = true; for( int j = 0; j < ( arr.length - i - 1 ); j++ ){ if( arr[j] > arr[j+1] ) { int tmp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = tmp; flag = false; } } if( flag ) break; display( "第" + ( i + 1 ) + "輪的比較結果: " ); } } public void display( String info ){ System.out.println( info ); for( int i = 0; i < arr.length; i++ ){ System.out.print( arr[i] + "\t" ); } System.out.println(); } } public class BubbleSort{ public static void main( String[] args ){ MyBubbleSort bs = new MyBubbleSort(); bs.display( "排序以前:" ); bs.sort(); bs.display( "排序以後:" ); } }
執行結果:排序
ghostwu@dev:~/java/data_struct/sort$ java com.ghostwu.BubbleSort 排序以前: 9 71 79 0 31 11 75 65 68 36 第1輪的比較結果: 9 71 0 31 11 75 65 68 36 79 第2輪的比較結果: 9 0 31 11 71 65 68 36 75 79 第3輪的比較結果: 0 9 11 31 65 68 36 71 75 79 第4輪的比較結果: 0 9 11 31 65 36 68 71 75 79 第5輪的比較結果: 0 9 11 31 36 65 68 71 75 79 排序以後: 0 9 11 31 36 65 68 71 75 79