用C语言实现冒泡排序并优化。 要求:1. 如果在某一趟排序中没有发生任何交换,说明数组已经有序,可以提前结束排序; 2.待排序数据长度可变; 3. 输入数据可变或随机生成
时间: 2024-09-09 15:15:34 浏览: 99
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。
以下是一个使用C语言实现冒泡排序的示例代码,其中包括了提前结束排序的优化:
```c
#include <stdio.h>
#include <stdbool.h>
void bubbleSort(int arr[], int n) {
bool swapped;
int i, temp;
for (i = 0; i < n-1; i++) {
swapped = false;
// 提前结束排序的优化:如果在这一趟排序中没有交换发生,则说明数组已经有序,可以提前结束排序
for (int j = 0; j < n-i-1; 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]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
```
在上述代码中,`bubbleSort` 函数接收一个整数数组 `arr` 和数组的长度 `n` 作为参数。变量 `swapped` 用于标记每一趟排序过程中是否有交换发生。如果没有交换发生,那么 `swapped` 保持 `false`,循环可以在下一次遍历前退出,这样就实现了提前结束排序的优化。
此外,待排序数据的长度是通过计算数组的大小得到的,这样就可以处理可变长度的数组。而输入数据在这段代码中是直接在数组 `arr` 中指定的,你可以根据需要修改这部分数据,或者设计一个随机数生成器来动态地生成待排序的数组。
阅读全文