氣泡排序--雙層巢狀,兩兩比較
阿新 • • 發佈:2019-02-16
氣泡排序的思想
1. 比較相鄰元素,按需求歸位。
2. 氣泡排序雙層巢狀,外層負責比較次數,內層負責比較歸位資料。
3. 最大或最小資料的歸位後,為優化效能不應該再次進行比較。
氣泡排序實現
public class BubbleSort {
public static void main(String[] args){
//定義並直接初始化陣列
int [] arr = {1,8,9,6,3,5,7,4};
//外層迴圈,取得迴圈次數
for (int i = arr.length-1; i > 0;i--) {
//內層迴圈,比較把最大數歸位
for (int j = 0; j < i; j++) {
if(arr[j] > arr[j+1]){
//定義中間變數,並交換位置
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//遍歷輸出排序好的陣列
for (int k:arr){
System.out.print(k+" ");
}
}
}
氣泡排序的時間複雜度
- (比較次數最少)所給列表和預期一致,即所給資料為正序或反序排列好的。則一趟掃描即可完成,內層迴圈關鍵字比較次數為n-1,置換元素次數0(即交換位置的程式碼不執行);忽略係數後時間複雜度為O(n);
- (比較次數最多)如果所給資料與預期剛好相反,如需要正序給的為反序。則需要進行置換排序操作了,每趟關鍵字的比較次數為比較次數n(n-1)/2=O(n^2),忽略係數計算時間複雜度為O(n^2),移動次數每次也進行3次移動置換操作3n(n-1)/2=O(n^2),忽略係數時間複雜度為O(n^2)。
- 平均時間複雜度為O(n^2)。
氣泡排序的穩定性
穩定性指排序後相同的元素是否會調換位置。
氣泡排序講究把小的元素往前調或者把大的元素往後調。氣泡排序比較相鄰元素,相同元素排序後仍然是原順序,所以氣泡排序是穩定的。(如果相鄰元素相同跳過比較了,所以排序後的結果是穩定的)
氣泡排序的優缺點
優點:程式碼簡單,雙層巢狀即可實現,具有穩定性
缺點:時間複雜度高