介绍
冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让他俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。
时间复杂度等
- 1.冒泡排序是原地排序算法吗?
- 冒泡的过程只涉及相邻数据的交换操作,只需要常量级的临时空间,所以它的空间复杂度为 O(1),是一个原地排序算法。
- 2.冒泡排序是稳定的排序算法吗?
- 在冒泡排序中,只有交换才可以改变两个元素的前后顺序。为了保证冒泡排序算法的稳定性,当有相邻的两个元素大小相等的时候,不做交换,相同大小的数据在排序前后不会改变顺序,所以冒泡排序是稳定的排序算法。
- 3.冒泡排序的时间复杂度是多少?
- 最好情况时间复杂度是 O(n),最坏情况时间复杂度为 O(n2),平均情况下的时间复杂度就是 O(n2)。
优化
当某次冒泡操作已经没有数据交换时,说明已经达到安全有序,不用再继续执行后续的冒泡操作。
代码
// 冒泡排序,a 表示数组,n 表示数组大小
public void bubbleSort(int[] a, int n) {
if (n <= 1) return;
for (int i = 0; i < n; ++i) {
// 提前退出冒泡循环的标志位
boolean flag = false;
for (int j = 0; j < n - i - 1; ++j) {
if (a[j] > a[j+1]) { // 交换
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
flag = true; // 表示有数据交换
}
}
if (!flag) break; // 没有数据交换,提前退出
}
}
来源:CSDN
作者:偶像来了
链接:https://blog.csdn.net/dulei17816/article/details/101281207