排序入門:冒泡(Bubble)算法解析帶動圖

解題思路

從左到右依次冒泡,把較大的數往右邊挪動即可。

 代碼

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)。它是一種穩定的排序算法。(穩定是指如果數組裏兩個相等的數,那麼排序前後這兩個相等的數的相對位置保持不變。)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章