1. 程式人生 > >氣泡排序法(BubbleSort)——交換類排序法(java實現)

氣泡排序法(BubbleSort)——交換類排序法(java實現)

氣泡排序法

從陣列的第一個元素arr[0]開始,兩兩比較arr[0]與arr[0+1],如果前面的數大於後面的數(arr[i]>arr[i+1]),那麼交換兩個元素的位置,把大的數往後移動。這樣依次經過一輪比較以後,最大的數將會被交換到最後的位置arr[arr.length-1]。
接下來進行下一輪的比較,此輪比較的次數較上一輪少一次,因為上一輪中的最大值已經排到最後面。以此進行迴圈,直到排序結束。
氣泡排序法的最壞時間複雜度和平均時間複雜度都為O(n²),最壞需要比較的次數為n(n-1)/2。

圖解如下

陣列排序前 7 23 12 4 33 21 2 17 13 9
第一輪排序 7 12 4 23 21 2 17 13 9 33
第二輪排序 7 4 12 21 2 17 13 9 23
第三輪排序 4 7 12 2 17 13 9 21
第四輪排序 4 7 2 12 13 9 17
第五輪排序 4 2 7 12 9 13
第六輪排序 2 4 7 9 12
第七輪排序 2 4 7 9
第八輪排序 2 4 7
第九輪排序 2 4

程式碼實現(java)

public class BubbleSort {

    public static void main(String[] args){
        int arr[] = {6,10,5,2,3,7,9,1};
        bubblesort(arr);
        pt(arr);
    }

    public static void bubblesort(int arr[]){
        for(int i = 0 ; i < arr.length-1 ; i++){   //將第i+1個最大值放到陣列後面
            for
(int j = 0 ; j < arr.length-i-1 ; j++){ //對相鄰元素進行比較、取逆。 if(arr[j] > arr[j+1]){ swap(arr,j,j+1); } } } } //封裝交換位置方法。 public static void swap(int arr[],int a , int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } public
static void pt(int arr[]){ for(int a:arr) System.out.print(a+" "); System.out.println(); } //有的同學可能會用這個函式進行交換,這個函式在C++中是可用的,而在Java中是無效的。 /* 原因: java中基本資料型別為值傳遞(pass in value) swap_error中的引數a與b是形參,呼叫此方法的arr[j],arr[j+1]為實參 呼叫此方法後,實參將值傳遞給形參a,b 由形參a,b再進行值的互換。 由於是不是引用傳遞而是值傳遞,在呼叫此方法後,其arr[j],arr[j+1]實際並沒有發生變化。 */ public static void swap_error(int a , int b){ int temp = a; a = b; b = temp; } } //Think Big, Think Long