c语言冒泡排序优化算法 优化 数据可变 通过键盘输入 加注释
时间: 2024-09-06 22:01:09 浏览: 47
计算机毕业设计 C语言学生成绩管理系统 练手
在C语言中,优化冒泡排序的一个常见方法是在遍历过程中添加一个标志变量来判断是否还需要继续交换。当一轮遍历结束后没有任何元素交换位置,说明数组已排序完成,无需再进行下一轮。以下是优化后的冒泡排序示例,使用了数据的动态输入,并加入了必要的注释:
```c
#include <stdio.h>
// 定义冒泡排序函数
void bubbleSort(int arr[], int n) {
int i, j, flag = 0; // 添加flag用于记录是否还有交换
for (i = 0; i < n - 1 && !flag; i++) { // 遍历直到n-1并且没有交换
flag = 1; // 假设每轮都会有交换,所以初始化为1
for (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;
flag = 0; // 有交换,更新flag为0
}
}
}
}
int main() {
int n, i;
printf("请输入数组的元素个数: ");
scanf("%d", &n);
int arr[n]; // 动态数组
printf("请输入%d个整数:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
bubbleSort(arr, n); // 调用排序函数
printf("排序后的数组: \n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在这个版本中,用户可以输入任意大小的数据,程序会根据输入进行排序。如果有一次没有发生交换,表示已经排序完毕,避免了不必要的比较。
阅读全文