算法步骤
(1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。
(2)这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1 个位置。
(3)N=N-1,如果 N 不为 0 就重复前面二步,否则排序完成。
代码示例
/**
* 冒泡排序。
* @param array 需要排序的数组
*/
public static void bubbleSort(int[] array) {
for(int i = 0; i < array.length; i++) {
for(int j = 1; j < array.length - i; j++) {
// 如果前面的数大,交换。
if(array[j - 1] > array[j]) {
int tmp = array[j - 1];
array[j - 1] = array[j];
array[j] = tmp;
}
}
}
}
调用示例:
public static void main(String[] args) {
int[] array = {8, 9, 2, 0, 5, 2, 22, 39, 10, 33};
bubbleSort(array);
for(int i : array) {
System.out.println(i);
}
}
时间复杂度
因为冒泡排序的特殊性,可能一次就排好了,也可能得一直排到最后;
所以就有了最好情况和最坏情况。
最好情况:就是比较一次,就是 O(N)
最坏情况:一直排到最后,就是 O(N^2)