解題思路
從左到右依次冒泡,把較大的數往右邊挪動即可。
代碼
public class BubbleSort {
private void sort(int[] arr) {
boolean haschange = true;
for (int i = 0; i < arr.length - 1 && haschange; i++) {
haschange = false;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
haschange = true;
}
}
}
}
private void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
算法分析
空間複雜度
假設數組的元素個數是 n,由於在整個排序的過程中,我們是直接在給定的數組裏面進行元素的兩兩交換,所以空間複雜度是 O(1)。
時間複雜度
1. 給定的數組按照順序已經排好
在這種情況下,我們只需要進行 n−1 次的比較,兩兩交換次數爲 0,時間複雜度是 O(n)。這是最好的情況。
2. 給定的數組按照逆序排列
在這種情況下,我們需要進行 n(n-1)/2 次比較,時間複雜度是 O(n2)。這是最壞的情況。
3. 給定的數組雜亂無章
在這種情況下,平均時間複雜度是 O(n2)。
由此可見,冒泡排序的時間複雜度是 O(n2)。它是一種穩定的排序算法。(穩定是指如果數組裏兩個相等的數,那麼排序前後這兩個相等的數的相對位置保持不變。)