java算法-冒泡排序

冒泡排序的特色: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    
相關文章
相關標籤/搜索