1. 基本思想
冒泡排序是交换排序的一种,所谓交换就是根据序列中两个数据的比较结果来对换这两个数据在序列中的位置,交换排序(递增)的特点是:将数据较大的记录向序列的尾部移动,数据较小的记录向序列的前部移动。
冒泡排序很容易理解,如下图能很好解释冒泡排序的规则及排序过程:
2. 代码实现
// 冒泡排序(递增)
void BubbleSort(int array[], int size) {
for (int i = 1; i < size; ++i) {
int sorted = 1;
for (int j = 0; j < size - i; ++j) { // 将剩余数据的最大值归位
if (array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j + 1];
array[j + 1] = tmp;
sorted = 0;
}
}
if (sorted == 1) { // 在一趟中没有排序,则算法结束
break;
}
}
}
测试数据:int array[] = { 3, 9, 1, 4, 2, 8, 2, 7, 5, 3, 6, 11, 9, 4, 2, 5, 0, 6 };
3. 性能分析
时间复杂度
- 最坏 O ( n 2 ) O(n^2) O(n2) 已经逆序
- 平均 O ( n 2 ) O(n^{2}) O(n2)
- 最好 O ( n ) O(n) O(n) 已经有序
空间复杂度
- O ( 1 ) O(1) O(1)
排序稳定性
- 稳定