基本思想: 比較兩個相鄰的元素,將值大的元素交換到右邊,雪碧中常常有許多小小的氣泡,往上飄,這是因為組成小氣泡的二氧化碳比水要輕,所以小氣泡才會一點一點的向上浮。而氣泡排序之所以叫氣泡排序直觀表達,每一趟遍歷,將一個最大的數移到序列末尾。
動圖實現,(來源參考資料)
演算法描述比較相鄰的元素,如果前一個比後一個大,交換之。
第一趟排序第1個和第2個一對,比較與交換,隨後第2個和第3個一對比較交換,這樣直到倒數第2個和最後1個,將最大的數移動到最後一位。第二趟將第二大的數移動至倒數第二位......因此需要n-1趟程式碼實現
public class BubbleSortMain { public static void main(String[] args) { Integer[] arr = {2,5,1,3,8,5,7,4,3}; System.out.println(Arrays.deepToString(arr)); // 排序前 sortBubble(arr); System.out.println(Arrays.deepToString(arr)); // 排序後 } // 冒泡方法 private static void sortBubble(Integer[] arr) { if (arr==null||arr.length<2){ return; } for (int i=0;i<arr.length-1;i++){ for (int j=0;j<arr.length-i-1;j++){ if (arr[j]>arr[j+1]){ int temp= arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } }}
氣泡排序時間複雜度
氣泡排序的時間複雜度是O(N2)。假設被排序的數列中有N個數。遍歷一趟的時間複雜度是O(N),需要遍歷多少次呢?N-1次!因此,氣泡排序的時間複雜度是O(N2)。
氣泡排序穩定性
氣泡排序是穩定的演算法,它滿足穩定演算法的定義。演算法穩定性 -- 假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;並且排序之後,a[i]仍然在a[j]前面。則這個排序演算法是穩定的!
最新評論