氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
1.1 演算法描述
1.2 **演示
基本的氣泡排序:
/**
* 氣泡排序寫法一 從小到大 公升序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n²) 空間複雜度(1)
* @param array
*/public static void bubblesort01(int array)
//臨時變數用於儲存資料
int temp = 0;
//外層迴圈控制迴圈次數
for(int i=0;iarray[j+1])}}
}
改進一:增加標誌
/**
* 氣泡排序寫法二 改進版,增加flag標誌 從大到小 降序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n) 空間複雜度(1)
* @param array
*/public static void bubblesort02(int array)
//臨時變數
int temp = 0;
//標誌變數
boolean flag = true;
//外層迴圈控制迴圈次數
for(int i=0;i改進二:再增加無序陣列邊界
/*** 再次進行改進 增加記錄無序陣列邊界 從大到小 降序 平均時間複雜度:o(n²) 最佳時間複雜度:o(n) 空間複雜度(1)
* @param array
*/public static void bubblesort03(int array)
//定義臨時變數儲存資料 最後無序的索引
int temp,lastchangeindex=0;
//定義排序邊界
int sortborder = array.length - 1;
//定義標誌變數
boolean flag = true;
for(int i=0;iarray[j+1])
}//無序陣列邊界最後的值為下次迴圈的閾值
sortborder = lastchangeindex;}}
時間複雜度什麼時候為o(n)?
當陣列本身有序時
空間複雜度為什麼是o(1)?
不遞迴都為1
氣泡排序是否穩定?
穩定什麼是穩定的排序?
如果a=b,排序前a在b前面,排序後a仍然在b前面,則是穩定的排序。如果a可能跑到了b後面,則排序是不穩定的。
氣泡排序演算法及優化
氣泡排序是一種典型的交換排序演算法,通過交換資料元素的位置進行排序。從序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大 小 的資料元素交換到了佇列的隊尾,從而成為有序序列的一部分 下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最...
氣泡排序及演算法優化
用雙重迴圈來控制,當相鄰元素不滿足要求的順序排列 從小到大或從大到小 時,就將兩元素交換位置,以此逐漸遍歷。void bubblesort int array long endtime system.currenttimemillis 列印排序後的前10個數 for int i 0 i 10 i s...
氣泡排序演算法及優化
正常的兩兩交換實現 private static void sort1 int a time system.out.println 跑了 time 次 system.out.println arrays.tostring a 當陣列後面的排好過後就不在執行實現 private static void...