1. 程式人生 > 實用技巧 >氣泡排序( Bubble Sort )

氣泡排序( Bubble Sort )

需求:
排序前:{4,5,6,3,2,1}
排序後:{1,2,3,4,5,6}
排序原理:

  1. 比較相鄰的元素。如果前一個元素比後一個元素大,就交換這兩個元素的位置。
  2. 對每一對相鄰元素做同樣的工作,從開始第一對元素到結尾的最後一對元素。最終最後位置的元素就是最大值。

    API設計

    程式碼實現
package sort;
//氣泡排序
public class Bubble {
    public static void sort(Comparable[] a) {
        for (int i = a.length - 1; i > 0; i--) {
            for (int j = 0; j < i; j++) {
                if (greater(a[j], a[j + 1])) {
                    exch(a, j, j + 1);
                }
            }
        }
    }

    /*
    比較v元素是否大於w元素
    */
    private static boolean greater(Comparable v, Comparable w) {
        return v.compareTo(w) > 0;
    }

    /*
    陣列元素i和j交換位置
    */
    private static void exch(Comparable[] a, int i, int j) {
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
}
package test;

import sort.Bubble;

import java.lang.reflect.Array;
import java.util.Arrays;
//測試類
public class TestBubble {
    public static void main(String[] args) {
        Integer[] a = {4, 5, 6, 3, 2, 1};
        Bubble.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

複雜度分析
元素比較的次數為:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)(N-1)/2=(N^2-N)/2;
元素交換的次數為:
(N-1)+(N-2)+(N-3)+...+2+1=((N-1)+1)

(N-1)/2=(N^2-N)/2;
總執行次數為:
(N2/2-N/2)+(N2/2-N/2)=N^2-N;
按照大O推導法則,保留函式中的最高階項那麼最終氣泡排序的時間複雜度為O(N^2).