冒泡排序(Java實現)
- 2021 年 5 月 26 日
- 筆記
- 演算法(Java實現)
冒泡排序
冒泡排序的思想:每一次將最大的數字往數組的最右邊排序
假如一個數組有n個元素,則最多需要n-1趟就可以完成排序。
冒泡排序的時間複雜度:O(n^2).
圖解實現(來自參考資料):
冒泡排序
來,話不多說,先上實現程式
1 public static void bubbleSort(int[] arr){ 2 int n = arr.length; 3 //循環最多n-1趟排序 4 for(int i=0;i<n-1;i++){ 5 boolean flag = false; //這裡定義一個標誌位,先不要管它的作用,下面會解釋 6 //循環每一趟中的單次排序(確定一個最大的數) 7 for(int j=0;j<n-1-i;j++) { //這裡減 i 的原因 是每完成一次排序就少一個需要排序的元素 8 if (arr[j] > arr[j + 1]) { 9 //交換兩數(利用異或運算實現兩數交換(不需要額外定義一個變數)) 10 arr[j] ^= arr[j + 1]; 11 arr[j + 1] ^= arr[j]; 12 arr[j] ^= arr[j + 1]; 13 //成功交換則將標誌位置位true 14 flag = true; 15 } 16 } 17 //如果在某一趟循環完畢了,而標誌位flag還是false,說明此時數組已經完全排序好,此時可以結束程式,達到提高效率的作用。 18 //這就是我要設置標誌位flag的意義之處。 19 if(flag == false){ 20 break; 21 } 22 } 23 }
測試程式碼:
1 public static void main(String[] args) { 2 int[] arr = new int[]{5,2,4,9,8,3}; 3 bubbleSort(arr); 4 for (int i: arr) 5 System.out.print(i+" "); 6 }
測試結果:
2 3 4 5 8 9
現在我們來思考一下冒泡排序是否是穩定的排序?
是穩定的。它不斷的循環,相同的數排在前面的還是排在前面,不會改變順序。