數據結構 冒泡排序

  基本思想:假設待排序表長爲n,從後往前(或從前日後)兩兩比較相鄰元素,若是是逆序(A[i-1] > A[i]),那麼交換這兩個元素,直到序列比較完。這是一趟冒泡,將最小的元素交換到待排序列的第一個位置(最小元素如同氣泡同樣逐漸往上「漂浮」直至「水面」,這是冒泡排序名字的由來)。下一趟冒泡時,前一趟肯定的最小元素再也不參與比較,待排序列減小了一個元素,每趟冒泡把待排序列中的最小元素放到了最終位置上,最多作n-1趟冒泡就能完成排序任務。冒泡排序產生的有序子序列是全局有序的,由於有序子序列中的全部元素小於或大於無序子序列中的全部元素,每一趟排序都會將一個元素放到最終位置上。html

  

 

 1 public class BubbleSort {  2 public static void bubbleSort(int[] arr) {  3 if (arr == null || arr.length <= 1) {  4 return;  5  }  6  7 int maxIndex = arr.length - 1;  8 for (int i = 0; i < maxIndex; i++) {  9 // 本趟冒泡是否發生交換的標誌 10 boolean isSwap = false; 11 // 一趟冒泡過程 12 for (int j = maxIndex; j > i; j--) { 13 // 若是相鄰元素出現逆序 14 if (arr[j - 1] > arr[j]) { 15 // 交換相鄰元素 16 int temp = arr[j - 1]; 17 arr[j - 1] = arr[j]; 18 arr[j] = temp; 19 20 isSwap = true; 21  } 22  } 23 24 // 若是本趟冒泡沒有發生交換,說明表已經有序 25 if (!isSwap) { 26 return; 27  } 28  } 29  } 30 31 public static void main(String[] args) { 32 int[] arr = {1, -1, 3, 2, -3}; 33  BubbleSort.bubbleSort(arr); 34 for (int item : arr) { 35 System.out.print(" " + item); 36  } 37  } 38 }

  輸出結果:算法

 -3 -1 1 2 3

  冒泡排序性能分析:數據結構

  空間複雜度:僅使用了常數個輔助單元,空間複雜度爲O(1)。性能

  時間複雜度:當初始序列有序時,第一趟冒泡後發現沒有交換元素,跳出循環,比較次數爲n-1,移動次數爲0,即最好狀況下的時間複雜度爲O(n)。當初始序列逆序時,須要n-1趟排序,第i趟排序要進行n-i次元素比較,並且每次比較後移動元素3次來交換元素。在這種狀況下,spa

  

  因此,最好狀況下時間複雜度爲O(n),最壞狀況下時間複雜度爲O(n2),平均狀況下時間複雜度爲O(n2)。code

  穩定性:由於當i>j且A[i]=A[j]時,不會交換元素,因此冒泡排序是穩定的。htm

 

  參考資料blog

  《2017年數據結構聯考複習指導》 P287排序

  圖解排序算法(一)之3種簡單排序(選擇,冒泡,直接插入)get

相關文章
相關標籤/搜索