尝试对冒泡排序算法进行改进,以降低其时间复杂度。使用C语言代码表示
时间: 2024-09-19 07:02:47 浏览: 29
冒泡排序是一种简单的排序算法,但它的时间复杂度是O(n^2),对于大规模数据并不高效。一种常见的优化版本是“鸡尾酒排序”或“双向冒泡排序”,它通过同时比较相邻元素并交换它们来提高效率。
下面是C语言代码示例,展示了如何使用双向冒泡排序:
```c
#include <stdio.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
void cocktail_sort(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]) {
swap(&arr[j], &arr[j + 1]);
swapped = true;
}
}
if (!swapped) {
// 如果一轮未发生交换,说明已经有序,可以提前结束
break;
}
// 然后再从右到左扫描
swapped = false;
for (int j = n - i - 2; j >= 0; j--) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
swapped = true;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
cocktail_sort(arr, n);
printf("\nSorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
阅读全文