C语言实现双向起泡排序
时间: 2024-12-05 12:11:29 浏览: 14
BidirectionalBubble,c语言反编源码,c语言
在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;
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
bubbleSort(arr, n);
printf("\nSorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
在这个示例中,`bubbleSort`函数首先初始化`swapped`标志为`false`,然后通过两个嵌套循环,一次从左到右,另一次从右到左,检查相邻元素并交换位置。如果一轮内没有发生交换,说明数组已排序,所以提前退出循环。
阅读全文