冒泡排序

當聽到別人說用了冒泡排序進行排序時,不瞭解的肯定疑惑什麼是冒泡排序、定義是什麼?

定義:n個記錄進行冒泡排序的方法是:首先將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若爲逆序,則交換兩個記錄的值,然後比較第二個記錄和第三個記錄的關鍵字,依此類推,直到第n-1個記錄和第n個記錄的關鍵字比較過爲止。上述過程稱爲第一趟冒泡排序,其結果是關鍵字最大的記錄被交換到第n個記錄位置上。然後進行第二趟冒泡排序,對前n-1個記錄進行同樣的操作,其結果是關鍵字次大的記錄被交換到第n-1個記錄的位置上。最多進行n-1趟,所記錄有序排列。若在某趟冒泡排序過程中沒有進行相鄰位置的元素交換處理,則可結束排序過程。

冒泡排序法在最好情況下(待排序列已按關鍵碼有序),只需做一趟排序,元素的比較次數爲n-1且不需要交換元素,因此總比較次數爲n-1次,總交換次數爲0次。在最壞情況下(元素已經逆序排列),進行第j趟排序時,最大的j-1個元素已經排好序,其餘的n-(j-1)個元素需要進行n-j次比較和n-j次交換,因此總比較次數爲n(n-1)/2,總交換次數爲n(n-1)/2.

冒泡排序是一種穩定的排序方法,其時間複雜度爲O(n的二次方)。
在排序過程中僅需要一個元素的輔助空間用於元素交換,空間複雜度爲O(1)。

瞭解了冒泡排序定義後,那就開始實踐吧!
/**
 * 冒泡排序
 * @author ZL
 * 2017年8月13日
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] ints={12,55,34,143,51,31,85,61,42,29,49,43,64,59,64,46,85,15,62,88};
        System.out.println("*****************排序之前***************");
        for (int i : ints) {
            System.out.print(i+"  ");
        }
        for(int i=ints.length-2;i>=0;i--){
            for(int j=0;j<=i;j++){
                if(ints[j]>ints[j+1]){
                    //左邊比右邊大
                    int temp;
                    temp=ints[j];
                    ints[j]=ints[j+1];
                    ints[j+1]=temp;
                }
            }
        }

        System.out.println("\n*****************排序之後***************");
        for (int i : ints) {
            System.out.print(i+"  ");
        }
    }
}

運行結果:

*****************排序之前***************
12  55  34  143  51  31  85  61  42  29  49  43  64  59  64  46  85  15  62  88  
*****************排序之後***************
12  15  29  31  34  42  43  46  49  51  55  59  61  62  64  64  85  85  88  143  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章