void bubbleSort(int arr[], int n) {
bool swapped;
for (int i = 0; i < n - 1; i++) {
swapped = false;
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true;
}
}
if (!swapped) break;
}
}
冒泡排序时间复杂度分析:
最坏情况时间复杂度:O(n²)
计算方式:
1. 外层循环需要执行n-1次(n为数组长度)
2. 内层循环在最坏情况下每次执行n-i-1次比较(i为外层循环次数)
3. 总比较次数 = (n-1) + (n-2) + ... + 1 = n(n-1)/2 ≈ n²/2
4. 因此时间复杂度为 O(n²)
最好情况时间复杂度:O(n)
当数组已经有序时,只需进行一轮n-1次比较即可确定,无需交换
平均时间复杂度:O(n²)
对于随机排列的数组,平均需要进行约n²/2次比较和n²/4次交换
空间复杂度:O(1)
冒泡排序是原地排序算法,只需要常数级别的额外空间