1. 程式人生 > 實用技巧 >二分答案

二分答案

氣泡排序(Bubble Sort)

  1. 氣泡排序的演算法原理
          比較相鄰的元素,如果前一個元素的值比後一個元素的值大,就交換元素的位置,對每一對元素做相同的工作。

          第一次排序:比較4和5的大小,4<5,不交換位置。比較5和6的大小,5<6不交換。比較6和3的大小,6>3,交換位置。再比較6和2的大小,6>2交換。最後比較6和1的大小,6>1交換。第一次排序後,最大的元素6到了最後的位置,並且6將不再進行下一輪的排序。
          第二次排序:比較4和5的大小,4<5,不交換位置。比較5和3的大小,5>3交換位置。比較5和2的大小,5>2交換位置。比較5和1的大小,5>1交換位置。5放到的最後位置,並且5也將不再進行下一輪排序。
          第三次排序:比較4和3的大小,4>3交換位置,比較4和2的大小,4>2交換位置,比較4和1的大小,4>1交換位置。4放到最後位置並且不再參與排序。
          第四次排序:比較3和2的大小,3>2交換位置,比較3和1的大小,3>1交換位置,3放到最後位置並且不參與排序。
          第五次排序:比較2和1的大小,2>1交換位置。2放到最後位置。

  2. 氣泡排序的程式碼

public class BubbleSort {
    private static boolean greater(Comparable v, Comparable w){
        return v.compareTo(w)>0;
    }
    
    private static void exch(Comparable[] a,int i,int j){
        Comparable temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }
    
    public static void sort(Comparable[] a){
        //外層決定排序的次數
        for(int i = a.length-1;i>0;i--){
            //內層決定比較的次數
            for (int j = 0;j<i;j++){
                //比較索引j和索引j+1處值的大小,並判斷是否進行交換
                if (greater(a[j],a[j+1])){
                    exch(a,j,j+1);
                };
            }
        }
    }
    
}

氣泡排序的時間複雜度為:O(n²)。
氣泡排序的穩定性:由程式碼可知,當兩個元素的值相等時,不會進行交換的操作,所以氣泡排序是一個穩定排序演算法。