在C语言中如何优化冒泡排序算法的时间复杂度,并给出优化后的代码示例?
时间: 2024-11-07 21:29:03 浏览: 2
为了优化冒泡排序的时间复杂度,我们通常采用一种称为“标志位”的技术。这种方法可以在某次遍历中没有发生任何交换操作时,提前结束排序。这样做的原因是,如果一个数组已经排序完成,那么在接下来的遍历中就不会再发生元素的交换,因此我们可以判断该数组已经有序,没有必要再进行下一次遍历。下面是使用标志位优化后的冒泡排序算法的C语言代码实现:
参考资源链接:[严蔚敏《数据结构》C版课后习题解析与答案](https://wenku.csdn.net/doc/33hjcy6k9d?spm=1055.2569.3001.10343)
```c
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
int swapped; // 用于标记是否发生过交换
for (i = 0; i < n - 1; i++) {
swapped = 0; // 每次遍历开始前将标志位设置为0
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换arr[j]和arr[j+1]
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = 1; // 发生交换,将标志位置为1
}
}
// 如果本次遍历没有发生交换,则数组已经有序,直接退出排序
if (swapped == 0) {
break;
}
}
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf(
参考资源链接:[严蔚敏《数据结构》C版课后习题解析与答案](https://wenku.csdn.net/doc/33hjcy6k9d?spm=1055.2569.3001.10343)
阅读全文