完成冒泡排序算法的设计(void BubbleSortO),对数组a中的n个整数类型的数据元素从小到大排序,上述功能定义在一个头文件中,并定义主函数的源文件,并验证结果;然后,分析该算法的时间复杂度。
时间: 2024-09-13 11:14:32 浏览: 39
首先,我们将在一个头文件`BubbleSort.h`中定义冒泡排序算法的函数原型:
```c
#ifndef BubbleSort_h
#define BubbleSort_h
#include <stdbool.h> // 包含布尔类型
#include <stdio.h> // 包含输入输出函数
void BubbleSortO(int arr[], size_t n); // 函数声明
bool is_sorted(int arr[], size_t n); // 检查数组是否已排序
#endif // BubbleSort_h
```
接着,我们会在`BubbleSort.c`文件中实现这个算法及其辅助函数:
```c
#include "BubbleSort.h"
void BubbleSortO(int arr[], size_t n) {
bool swapped;
for (size_t i = 0; i < n - 1; i++) {
swapped = false;
for (size_t 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;
swapped = true;
}
}
// 如果一轮循环未发生交换,则数组已经排序完成
if (!swapped)
break;
}
}
bool is_sorted(int arr[], size_t n) {
for (size_t i = 1; i < n; i++)
if (arr[i] < arr[i - 1])
return false;
return true;
}
int main() {
int test_array[] = {5, 2, 8, 1, 9, 4};
size_t n = sizeof(test_array) / sizeof(test_array[0]);
BubbleSortO(test_array, n);
printf("Sorted array: ");
for (size_t i = 0; i < n; i++)
printf("%d ", test_array[i]);
printf("\n");
if (is_sorted(test_array, n))
printf("The array is sorted.\n");
else
printf("The array is not sorted.\n");
return 0;
}
```
在`main`函数中,我们创建了一个测试数组,然后调用`BubbleSortO`对其进行排序,最后检查是否真的按升序排列。
关于冒泡排序的时间复杂度分析:
- 最好情况(数组已经排序):每次循环都没有交换,时间复杂度是O(n),因为只进行一次遍历。
- 平均情况和最坏情况:每个元素都需要比较和交换其位置,总共需要n*(n-1)/2次比较,时间复杂度是O(n^2)。
- 总结:尽管冒泡排序易于理解和实现,但对于大数据集,它的效率较低,更适合小型或者几乎有序的数组。
阅读全文