冒泡排序(Java實現)

冒泡排序

冒泡排序的思想:每一次將最大的數字往數組的最右邊排序

                            假如一個數組有n個元素,則最多需要n-1趟就可以完成排序。

冒泡排序的時間複雜度:O(n^2).

圖解實現(來自參考資料):

bubble

 

                                                                                         冒泡排序

 

來,話不多說,先上實現程式

 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 

 現在我們來思考一下冒泡排序是否是穩定的排序?

     是穩定的。它不斷的循環,相同的數排在前面的還是排在前面,不會改變順序。