簡單排序算法(初級算法)--冒泡排序(Bubble Sort)

在冒泡排序算法之前,先說一下算法一些專業術語

算法術語說明 

  1. 穩定性:如果a原本在b前面,而a=b,排序之後a仍然在b的前面
  2. 不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面。
  3. 內排序:所有排序操作都在內存中完成。
  4. 外排序:由於數據太大,因此把數據放在磁盤中,而排序通過磁盤和內存的數據傳輸才能進行。
  5. 時間複雜度:一個算法執行所耗費的時間。
  6. 空間複雜度:運行完一個程序所需內存的大小。

 排序的概述

1.冒泡排序含義

冒泡排序是一種簡單的排序算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把它們交換過來。走訪數列的工作是重複地執行直到沒有再需要交換。也就是說該數列已經排序完成。這個算法地名字由來是因爲越小的元素會經由交換慢慢“浮”到數列的頂端。

 

2.冒泡排序算法描述

  1. 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個,那就是升序;
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
  3. 針對所有的元素重複以上的步驟,除了最後一個;
  4. 重複步驟1~3,直到排序完成。 

 

3.冒泡排序動態演示

 

 

4.冒泡排序代碼示例

    public static void main(String[] args) {
        int[] arr = {6, 9, 8, 1, 5};
        sort(arr);
    }

    public static void sort(int[] arr) {
        if (arr == null || arr.length <= 1) {
            return;
        }
        // arr.length - 1不減一也是可以的,只不過多循環了一次內外循環,
        // 因爲最後一個數在內層循環以後已經是最大了,這裏減一可以減少不必要的循環。
        for (int i = 0; i < arr.length - 1; i++) {
            /***
             * arr.length - 1 - i,因爲在判斷裏有arr[j] > arr[j + 1](也就是說當前座標對比座標下一個)的操作,
             * 所以每一次內層循壞arr.length - 1,
             * ,那麼之後再減i,是因爲每一次完整的循環,都會在後面依次排好一個順序數字。所以減去i可以減少不必要的循環
             */
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                   // utils.swap(arr, j, j + 1);
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }

5.冒泡排序算法分析

  1. 最佳情況:T(n)=O(n),數據量小或者是順序排序的可能性高
  2. 最差情況:T(n)=O(n2) 數據量大一些,或者是數據比較混亂那麼比對次數就會增多
  3. 平均情況:T(n)=O(n2)一般都不會是最佳情況的。

 

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