排序演算法之氣泡排序

2021-09-28 17:18:43 字數 1538 閱讀 9623

氣泡排序顧名思義就是整個排序過程就像氣泡一樣往上公升,單向氣泡排序的基本思想就是:給定 n 個數值,從第乙個值開始一次對相鄰的進行比較,當前面的值大於後面的值的時候,交換位置,依次比較完之後算一輪,n 個值中的最大值將在最後一位,然後對前面的 n-1 位進行第二輪比較,依次類推。

例如:

第一輪:

1 < 6 位置不變

6 > 3 交換位置

6 > 5 交換位置

6 < 7 位置不變

7 < 9 位置不變

9 > 8 交換位置

9 > 4 交換位置

第一輪結束,開始第二輪 比較 n-1 個數

public class bubblesort 

}system.out.println("第" + (i + 1) + "輪後: " + arrays.tostring(arr));}}

public static void main(string args) ;

bubblesort(arr);

}}

第1輪後: [1, 3, 5, 6, 7, 8, 4, 9]

第2輪後: [1, 3, 5, 6, 7, 4, 8, 9]

第3輪後: [1, 3, 5, 6, 4, 7, 8, 9]

第4輪後: [1, 3, 5, 4, 6, 7, 8, 9]

第5輪後: [1, 3, 4, 5, 6, 7, 8, 9]

第6輪後: [1, 3, 4, 5, 6, 7, 8, 9]

第7輪後: [1, 3, 4, 5, 6, 7, 8, 9]

從輸出結果中,可以看出其在第5輪之後就已經排好序了,不要在進行排序了,這個時候說名字已經不會再出現 arr[j] > arr[j+1] 的情況,可以這樣進行優化:

public class bubblesort 

}if (success)

break;

system.out.println("第" + (i + 1) + "輪後: " + arrays.tostring(arr));}}

public static void main(string args) ;

bubblesort(arr);

}}

第1輪後: [1, 3, 5, 6, 7, 8, 4, 9]

第2輪後: [1, 3, 5, 6, 7, 4, 8, 9]

第3輪後: [1, 3, 5, 6, 4, 7, 8, 9]

第4輪後: [1, 3, 5, 4, 6, 7, 8, 9]

第5輪後: [1, 3, 4, 5, 6, 7, 8, 9]

然後分析一下時間複雜度和空間複雜度,時間複雜度是最壞 o(n^2),最好o(n),空間複雜度是 o(1),穩定排序,應為在數值相同時,並沒有交換兩個數值之間的位置。

時間複雜度計算:

兩層迴圈,第1次遍歷n次(n個元素),第二次遍歷n-1次,… 依次類推。因此,表示式如下:

n + (n - 1) + (n - 2) + … + 1 = n * (n + 1) / 2 = o(n^2)

排序演算法之氣泡排序

參考 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。若...

排序演算法之氣泡排序

對於大多數學計算機的人來說,氣泡排序應該都是接觸的第一種排序方式,氣泡排序的排序思想是比較簡單的,它的演算法的是 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了...

排序演算法之氣泡排序

氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,...