【Java】冒泡排序實現

交換類排序主要是通過兩兩比較待排元素的關鍵字,若發現與排序要求相逆,則“交換”之。在這類排序方法中最常見的是冒泡排序和快速排序。簡單寫一寫冒泡排序。

冒泡排序的思想

首先,將 n 個元素中的第一個元素和第二個元素進行比較,如果兩個元素的位置爲逆序,則交換兩個元素的位置;進而比較第二個和第三個元素關鍵字,如此類推,直到比較第 n-1 個元素和第 n 個元素爲止;上述過程描述了冒泡排序的第一趟排序過程,在第一趟排序過程中,我們將關鍵字最大的元素通過交換操作放到了具有 n 個元素的序列的最後一個位置上。然後進行第二趟排序,在第二趟排序過程中對元素序列的前 n-1 個元素進行相同操作,其結果是將關鍵字次大的元素通過交換放到第 n-1 個位置上。一般來說,第 i (i>=1)趟排序是對元素序列的前 n-i+1 個元素進行排序,使得前 n-i+1 個元素中關鍵字最大的元素被放置到第 n-i+1 個位置上。排序共進行 n-1 趟,即可使得元素序列按關鍵字有序。

代碼實現

public class BubbleSortTest {
    public static void main(String[] args) {
        Integer[] arr = {5,2,7,3,9,10,8,6,1,4};
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void bubbleSort(Integer[] arr){
        //假設從小到大排序
        //此標誌是:如果在第一趟排序時沒有交換任何元素位置,那麼就說明該數組是有序的。
        boolean flag = false;
        //外層循環是第幾趟排序過程,最後只剩一個元素的時候就不需要比較了。
        //所以,對於長度爲n的數組,需要進行n-1趟排序
        for (int i = 1; i < arr.length; i++) {
            //在每一趟排序後,數組右側有序區逐漸變大,在第i趟排序要對數組的前n-i+1個元素進行排序,
            //第n-i+1個元素的索引是n-i,同時,需要保證j+1<=n-i
            for (int j = 0; j < arr.length-i; j++) {
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                    flag = true;
                }
            }
            if(!flag) {break;}
        }
    }
}

如果還是不理解這兩個for循環i和j的取值範圍,可以自己在紙上畫一畫。

 

空間效率

僅使用一個輔助存儲單元。

 

時間效率

冒泡排序的時間複雜度爲Ο(n2)【n的平方】。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章