蠻力法之氣泡排序(簡單易懂)
阿新 • • 發佈:2019-01-24
簡介
氣泡排序屬於基本的教學式排序,真正的開發基本不會獨立使用。它屬於蠻力法。
- 氣泡排序的思想非常簡單
- 遍歷所有元素,將元素
0和1
,1和2
,2和3
這樣進行比較。值大的放到後面,像冒泡一樣向上升。 - 遍歷完第一遍,陣列的最後一個值一定是最大值。
- 然後再進行遍歷、比較。完後,陣列的倒數第二個值為第二大值。
- 以此類推!
- 遍歷所有元素,將元素
核心程式碼
/**
* 氣泡排序
*
* @param arr
*/
public static void bubbleSort(int[] arr) {
// 需要迴圈的次數
for (int i = 0; i < arr.length - 1 ; i++) {
boolean flag = true;
// 需要比較的元素個數
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
}
- 這是改良後的氣泡排序!相比較普通的氣泡排序,上述只增加了
flag
標誌及判斷。 - 雖然氣泡排序是蠻力法,屬於從頭到尾一個個比較。但有可能在運氣好的時候,沒有將迴圈次數迴圈完就已經排序完成。
- 判斷的依據就是內層
for
迴圈的if
判斷。如果某一輪的if判斷沒有進去,那就說明沒有交換的可能了。進一步說明,排序提前完畢!
優缺點
優點
- 簡單!
缺點
- 效率不高,畢竟是蠻力法。
複雜度
時間複雜度
O(n^2)
空間複雜度
O(1)
穩定度
- 穩定
應用場景
- 5個數以內的排序用冒泡最好
- 資料量足夠小,比如鬥牛遊戲的牌面排序、多關鍵字排序