1. 程式人生 > >氣泡排序--雙層巢狀,兩兩比較

氣泡排序--雙層巢狀,兩兩比較

氣泡排序的思想
1. 比較相鄰元素,按需求歸位。
2. 氣泡排序雙層巢狀,外層負責比較次數,內層負責比較歸位資料。
3. 最大或最小資料的歸位後,為優化效能不應該再次進行比較。

氣泡排序實現

public class BubbleSort {

    public static void main(String[] args){
        //定義並直接初始化陣列
        int [] arr = {1,8,9,6,3,5,7,4};
        //外層迴圈,取得迴圈次數
        for (int i = arr.length-1; i > 0;i--) {
            //內層迴圈,比較把最大數歸位
for (int j = 0; j < i; j++) { if(arr[j] > arr[j+1]){ //定義中間變數,並交換位置 int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } //遍歷輸出排序好的陣列 for
(int k:arr){ System.out.print(k+" "); } } }

氣泡排序的時間複雜度

  1. (比較次數最少)所給列表和預期一致,即所給資料為正序或反序排列好的。則一趟掃描即可完成,內層迴圈關鍵字比較次數為n-1,置換元素次數0(即交換位置的程式碼不執行);忽略係數後時間複雜度為O(n);
  2. (比較次數最多)如果所給資料與預期剛好相反,如需要正序給的為反序。則需要進行置換排序操作了,每趟關鍵字的比較次數為比較次數n(n-1)/2=O(n^2),忽略係數計算時間複雜度為O(n^2),移動次數每次也進行3次移動置換操作3n(n-1)/2=O(n^2),忽略係數時間複雜度為O(n^2)。
  3. 平均時間複雜度為O(n^2)。

氣泡排序的穩定性
穩定性指排序後相同的元素是否會調換位置。
氣泡排序講究把小的元素往前調或者把大的元素往後調。氣泡排序比較相鄰元素,相同元素排序後仍然是原順序,所以氣泡排序是穩定的。(如果相鄰元素相同跳過比較了,所以排序後的結果是穩定的)

氣泡排序的優缺點
優點:程式碼簡單,雙層巢狀即可實現,具有穩定性
缺點:時間複雜度高