冒泡排序属于交换排序,通过相邻元素两两比较交换,使最大(或最小)的元素像气泡一样逐渐「冒」到序列的一端。
基本思想
每一趟从前往后(或从后往前)比较相邻元素,若逆序则交换,每趟确定一个元素的最终位置。
void BubbleSort(int A[], int n) {
for (int i = 0; i < n - 1; i++) {
bool flag = false; // 标记本趟是否发生交换
for (int j = n - 1; j > i; j--)
if (A[j] < A[j - 1]) {
swap(A[j], A[j - 1]);
flag = true;
}
if (!flag) return; // 本趟未交换,已有序
}
}复杂度
- 最好情况(已有序):
- 最坏情况(逆序):
- 平均情况:
- 稳定性:稳定
- 空间复杂度: