冒泡排序
這個算法的名字由來是因爲越小的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。
原理
-
首先定義一個數組
-
把它像冒泡一樣排序
第一次 1 與 32 相比 1<32 不動 故數組爲 {1, 32, 5, 75, 3, 4, 88} 未發生變化
第二次 32 與 5 相比 32>5 調換位置 故數組爲 {1, 5, 32, 75, 3, 4, 88} 5與32 調換位置 大的在右邊 冒泡繼續向上升
第三次 32 與 75 相比 32<75 不動 故數組爲 {1, 5, 32, 75, 3, 4, 88} 未發生變化
第四次 75 與 3 相比 75>3 調換位置 故數組爲 {1, 5, 32, 3, 75, 4, 88} 3與75 調換位置 大的在右邊 冒泡繼續向上升
第五次 75 與 4 相比 75>4 調換位置 故數組爲 {1, 5, 32, 3, 4, 75, 88} 4與75 調換位置 大的在右邊 冒泡繼續向上升
第六次 75 與 88 相比 75<88 不動 故數組爲 {1, 5, 32, 3, 4, 75, 88} 未發生變化
第一輪結束 出現最大的 88 在最後 第二輪開始 繼續這樣相比
。。。。。。。
第二輪結束 :數組爲 {1, 5, 3, 4, 32, 75, 88} 第二大出現 :75 內排序次數會減一 因爲出現最大的數字了
第三輪結束 :數組爲 {1, 3, 4, 5, 32, 75, 88} 第三大出現 :32 內排序次數會減一 因爲出現最大的數字了
。。。。。。。
最後數組結果 {1, 3, 4, 5, 32, 75, 88}
排序結束
- 代碼
int[] Bubbling = {1, 32, 5, 75, 3, 4, 88};
for (int i = 0; i < Bubbling.length-1; i++) {
for (int j = 0; j < Bubbling.length-1-i; j++) {
// 左右相比 若左邊大於右邊 則調換位置
if (Bubbling[j]>Bubbling[j+1]){
// 定義一個臨時變量記錄 左邊的數字
int temp = Bubbling[j];
// 開始調換
Bubbling[j] = Bubbling[j+1];
// 把臨時變量賦給右邊的數
Bubbling[j+1] = temp;
}
}
System.out.println("第"+i+"輪:"+Arrays.toString(Bubbling));
}
System.out.println(Arrays.toString(Bubbling));
優化版本
public class BubbleSort {
public static void main(String[] args) {
int[] bubbling = {1, 32, 5, 75, 3, 4, 88};
bubbleSort(bubbling);
System.out.println(Arrays.toString(bubbling));
}
public static void bubbleSort(int[] arr) {
boolean flag = false; // 記錄是否經過調換
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
//進行調換
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//經過調換 設置爲true
flag = true;
}
}
//爲false 說明沒有經過調換 就跳過循環
if (!flag) {
break;
} else {
//經過了調換就給他 設置爲false
flag = false;
}
}
}
}
記得微笑 !