将冒泡排序函数中控制遍数和每遍比较次数的初值均从0改为1,修改函数并实现降序排序C语言
时间: 2025-01-03 14:44:11 浏览: 8
在C语言中,传统的冒泡排序是一个逐个比较相邻元素并交换它们的位置,直到整个序列有序的过程。如果你想要改变初值,并实现降序排序(即最大元素先沉到数组底部),你可以对原始的冒泡排序算法做如下修改:
```c
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
bool swapped; // 初始假设没有发生交换
for (i = 0; i < n - 1; i++) { // 控制遍数(减少一次,因为最后一个元素已经是最大的)
swapped = false; // 每次开始时假设不会交换
for (j = 0; j < n - 1 - i; j++) { // 每次只遍历未排序部分,减少比较次数
if (arr[j] > arr[j + 1]) { // 降序判断
temp = arr[j];
arr[j] = arr[j + 1]; // 交换
arr[j + 1] = temp;
swapped = true; // 发生了交换
}
}
// 如果一轮比较下来没有发生交换,说明已经有序,可以提前结束
if (!swapped)
break;
}
printf("Sorted array in descending order:\n");
for (i = 0; i < n; i++)
printf("%d ", arr[i]);
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
return 0;
}
```
这个版本的冒泡排序会在找到最大元素后停止,因此它实现了降序排序,同时减少了不必要的比较次数。如果一轮内都没有发生交换,表示序列已完全排序,此时会提前退出循环。
阅读全文