算法原理
例如我們有一個數組,我們如果需要把較大的元素排在後面,把小的元素排在前面,那麼需要從頭部到尾開始比較操作:
- 依次比較相鄰的兩個數,如果第一個比第二個大,就交換他們兩個
- 往後對每個相鄰的元素都做這樣的比較,交換操作,這樣到數組尾部時,最後一個元素會成爲最大的元素
- 重新從頭部開始第 1、2 步的操作,除了在這之前尾部已經排好的元素
- 繼續對越來越少的數據進行比較和交換操作,直到沒有可比較的數據爲止,排序完成
有一個數組:5,3,6,2,1,7,4,希望從小到大排序。按照冒泡排序的思想,我們要把相鄰的元素兩兩比較,根據大小來交換元素的位置,過程如下:
首先讓5和3比較,發現5比3要大,所以5和3交換位置
繼續比較5和6比較,發現5比6要小,所以元素位置不變
接下來讓6和2比較,發現6比2要大,所以6和2交換位置
接下來讓6和1比較,發現6比1要大,所以6和1交換位置
接下來讓6和7比較,發現6比7要小,元素位置不變
繼續讓7和4比較,發現7大於4,7和4交換位置
可以看到,經過第一趟的排序之後。我們已經找到了最大的元素,並且把最大的數字7排最右側,就像水氣泡從水底冒上來一樣,所以形象的稱爲“冒泡排序”。
後續比較跟上面同理~
代碼實現
代碼比較簡單,使用雙循環來進行排序
外部循環控制所有的回合
內部循環代表每一輪的冒泡處理,先進行元素比較,再進行元素交換
public static void main(String args[]) {
int arr[] = {5, 3, 6, 2, 1, 7, 4};
System.out.println("未排序:"+ Arrays.toString(arr));
//定義一個臨時變量
int temp;
//冒泡趟數 n-1趟
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - x - 1; y++) {
if (arr[y] > arr[y + 1]) {
temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] = temp;
}
}
}
System.out.println("排序後:"+ Arrays.toString(arr));
}
未排序:[5, 3, 6, 2, 1, 7, 4]
排序後:[1, 2, 3, 4, 5, 6, 7]
希望本文內容對大家有所幫助。