实现如下(从小到大排序)
for (int i = 0; i < data.length; i++) {
boolean flag = false;
for (int j = i + 1; j < data.length; j++) {
if (data[i] > data[j]) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
过程分析
- 冒泡排序第一次会将第一个元素、与之后每个元素相比较,如果后者小于第一个元素,那么将后者放置第一个位置
- 第二次会将第二个元素、与之后每个元素比较,如果后者小于第二个元素,那么将后者放置第二个位置
- 如此往复,保证第一个元素最小,第二个位置次之。。。最终整个数组有序
比如6,4,3,5,1,2这个顺序的数组,排序过程如下:
复杂度分析
- 冒泡排序只设计两个数据的对比和交换操作,只需要常量级别的临时空间,所以空间复杂度为O(1),是一个原地排序算法
- 冒泡排序对于相等的两个数据,是不会互换位置的,因此冒泡排序是一种稳定的排序算法
- 最好时间复杂度:O(1);最坏时间复杂度:O(n2);平均时间复杂度:O(n2)