資料結構與演算法 - 排序1 氣泡排序
阿新 • • 發佈:2021-02-10
技術標籤:Java演算法資料結構與演算法資料結構排序演算法java演算法
public class BubbleSort {
/**
* 執行氣泡排序
* @param arrays 待排序陣列
* @param order 正序or逆序
* @return
*/
public static int[] sort(int[] arrays, boolean order) {
// 1, 特殊情況, 陣列的長度小於等於1, 沒有必要排序, 直接返回
if (arrays.length <= 1 ) {
return arrays;
}
// 2, 根據order確定是正序, 還是倒序拍你
int flag = order ? 1 : -1;
// 3, 資料交換標誌位
boolean change = false;
int temp = 0;
for (int i = 0; i < arrays.length; i++) {
for (int j = 0; j < arrays.length - i - 1; j++) {
if (flag * (arrays[j] - arrays[j + 1]) > 0) {
temp = arrays[j];
arrays[j] = arrays[j + 1];
arrays[j + 1] = temp;
change = true;
}
}
// 優化, 如果沒有資料交換, 則提前退出
if (!change) {
break ;
}
}
return arrays;
}
/**
* 執行氣泡排序
* @param arrays 待排序陣列
* @return
*/
public static int[] sort(int[] arrays) {
return sort(arrays, true);
}
}
空間複雜度: O(1), 因為是就地排序;
時間複雜度: O(n^2) <-- 平均時間複雜度