1. 冒泡排序的原理
冒泡排序的思想就是:假設有n個數據 循環n次 兩兩比較 例如 1 3 4 2 7
1與3 先比較 小的在前大的在後 是順序 所以不需要變,
指針後移 3與4相比 不變指針後移
4與2相比 反序 交換位置 變爲2 4 也就是數組序列變爲 1 3 2 4 7
指針後移 4與7比 正序 不變
這就是第一次排序 找到了最大的值放在最後
接下來還是這麼比較 就找到了第二大的 放在倒數第二的位置 以此類推
如圖:
2.代碼如下
package com.study;
public class Sort {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
Sort.mp(a);
for (int arry:a) {
System.out.println(arry);
}
}
//冒泡
public static void mp(int[] a){
for (int i = 0;i < a.length-1;i++){
for (int j = 1;j < a.length;j++){
if(a[j-1] > a[j]){
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
}
}
3. 相關知識
- 時間複雜度時候O(n^2)
- 冒泡排序是穩定的排序算法
所謂穩定 就是假設序列 12234 有相等的值2 經過排序後 a[1] 的2還是原來a[1]的2 不與a[2]的2 交換位置 - 空間複雜度是O(1)
- 冒泡排序是交換排序
4.優化
上述序列如果是有序的 但是冒泡排序還需要比較n遍,改進思路 設置一個變量 如果在一次比較過程中 沒有發生位置的改變 說明序列有序 退出循環