思路:
- 两个元素比较,大的放到右边
- 从头开始依次比较相邻的两个元素,目的是找出最大的一个元素放到末尾,这个元素不再参与比较
- 第二次仍然从头开始,把第二大的元素放到正确的位置
- 一共比较 len -1 趟,因为已经确定了 len -1 个元素的位置,那么第 n 个肯定是最小的那个了
- 第 i 趟的比较次数为 len - i -1,因为每次都会和下一个元素比较
- 当两个元素相等时不交换,是稳定的排序算法
- 优化:当某一趟没有进行任何交换时,说明已经是有序了
对 2,5,1,6,9,3 进行排序
算法实现:
/**
* 冒泡排序
*/
public class Solution {
public static void bubbleSort(int[] array) {
boolean swap; // 优化
for (int i = 0; i < array.length; i++) {
swap = false;
// i 从第 0 次开始,没一趟都会少比较一个元素
// -1 表示比较次数少于元素个数
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
swap = true;
}
}
if (swap = false) {
break;
}
}
}
public static void main(String[] args) {
int[] array = new int[]{2, 5, 1, 6, 9, 3};
bubbleSort(array);
for (int i : array) {
System.out.print(i + " "); // 1 2 3 5 6 9
}
}
}