冒泡排序c语言
```c
include
include
// 冒泡排序函数
void bubbleSort(int arr[], int n) {
bool isSorted; // 标记数组是否已排序
for (int i = 0; i < n - 1; i++) { // 外层循环控制轮数,共需n-1轮
isSorted = true; // 假设本轮已排序,用于提前终止优化策略
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;
isSorted = false; // 发生交换,标记数组未排序
}
}
// 若本轮无交换,说明数组已有序,提前终止排序
if (isSorted) break;
}
}
int main() {
int arr[] = {6, 3, 8, 2, 5}; // 待排序数组
int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
printf("排序前: "); // 输出排序前的数组元素
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 循环输出每个元素的值
}
bubbleSort(arr, n); // 执行冒泡排序算法
printf("排序后: "); // 输出排序后的数组元素
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]); // 循环输出每个元素的值,此时已按升序排列
}
return 0; // 程序结束返回0值
}
```
代码说明:这段代码实现了冒泡排序算法的核心逻辑,包括外层循环控制轮数、内层循环比较相邻元素并交换位置。通过布尔变量`isSorted`实现提前终止的优化策略,减少不必要的遍历次数。时间复杂度方面,最佳情况下为O(n),最坏情况下为O(n²)。关键操作包括交换相邻元素和提前终止策略的应用。在代码的最后部分展示了排序前后的数组元素输出。注意事项包括适用场景和冒泡排序的稳定性特点。