基本思想
- 比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。
- 这样对数组的第 0 个数据到 N-1 个数据进行一次遍历后,最大的一个数据就"沉"到数组第N-1 个位置。
- 如此循环 (N-1)次,每次循环需要比较的个数 N 都减 1。当 N = 0 时结束。
代码实现
java
public static void bubbleSort(int[] arr) {
for (int times = arr.length - 2; times > 0; times--) {
for (int pivot = 0; pivot <= times; pivot++) {
if (arr[pivot] > arr[pivot + 1]) {
int temp = arr[pivot];
arr[pivot] = arr[pivot + 1];
arr[pivot + 1] = temp;
}
}
}
}
算法复杂度
假设排序的元素个数为 n,则需要循环 n-1 次,每次比较次数都减1也就是说一次循环中最多比较n-1次 最少比较1次。所以 T(n) = n(n+1)/2
,O(n) = n²
。