1. 程式人生 > >【排序】圖解氣泡排序

【排序】圖解氣泡排序

一、思想

對相鄰的元素進行兩兩比較,順序相反則進行交換,這樣,每一趟都會將最小或最大的元素交換的頂端,最終達到完全有序,例如,升序排列,就是最大的元素移動後面的過程。

二、圖解過程

氣泡排序

冒泡排序升序排列的整個過程如下圖,陣列共包含6個元素,第一輪將6個元素中最大的元素“11”交換至陣列的最後;第二輪將剩下5個元素中的最大元素“8”交換至“11”的前面。依次執行,直到所有的元素比較完成。總的來說,冒泡排序升序排列就是不斷將最大的元素移動到後面的過程。

三、核心程式碼

//氣泡排序演算法
public static void bubbleSort
(int[] arr) { //不滿足交換條件 if(arr == null || arr.length < 2) { return; } for(int e = arr.length - 1; e > 0; e--) { for(int i = 0; i < e; i++) { if(arr[i] > arr[i+1]) { swap(arr, i, i + 1); } } } } //交換陣列中的兩個元素 public static void swap(int[] arr, int i, int j) { int temp = arr[
i]; arr[i] = arr[j]; arr[j] = temp; }

從上面的動圖可以看出,當將最大的兩個元素交換到正確位置時,前面的4個元素已經排序完成,為了減少不必要的比較,可以增加一個標誌位,判斷排序的結果,只要有一個輪次沒有發生交換,表示陣列已經排序完成,不再執行下面的輪次。

四、複雜度分析

1、時間複雜度:O(N^2)

若陣列為倒序,即所有的輪次都必須執行完(最壞情況),比較次數為n-1 + n-2 +...+ 1 = n(n-1)/2,交換次數與比較次數相同,所以時間複雜度為O(N^2)

2、額外空間複雜度:O(1)

未藉助其它輔助空間。

完整原始碼