一、動圖演示
二、思路分析
1. 相鄰兩個數兩兩相比,n[i]跟n[j+1]比,如果n[i]>n[j+1],則將連個數進行交換,
2. j++, 重復以上步驟,第一趟結束后,最大數就會被確定在最后一位,這就是冒泡排序又稱大(小)數沉底,
3. i++,重復以上步驟,直到i=n-1結束,排序完成。
三、負雜度分析
1. 不管原始數組是否有序,時間復雜度都是O(n2),
因為沒一個數都要與其他數比較一次,(n-1)2次,分解:n2+2n-1, 去掉低次冪和常數,剩下n2,所以最后的時間復雜度是n2
2. 空間復雜度是O(1),因為只定義了一個輔助變量,與n的大小無關,所以空間復雜度為O(1)
四、 選擇排序和冒泡排序的比較
1. 時間負責度都是O(n2)
2. 空間復雜度都是O(1)
3. 選擇排序是從第一位開始確定最大或最小的數,保證前面的數都是有序的,且都比后面的數小或大,
冒泡排序是從最后一位開始確定最大或最小的數,保證后面的數都是有序的且都大於或小於前面的數。
五、Java 代碼如下
import java.util.Arrays; public class 冒泡 { public static void main(String[] args) { int[] n = new int[]{1,6,3,8,33,27,66,9,7,88}; int temp; for (int i = 0; i < n.length-1; i++) { for (int j = 0; j <n.length-1; j++) { if(n[j]>n[j+1]){ temp = n[j]; n[j] = n[j+1]; n[j+1] = temp; } } } System.out.println(Arrays.toString(n)); } }