#include <stdio.h> #include <stdbool.h> #include <time.h> #include <stdlib.h>
void bubbleSort(int arr[], int n); void bubbleSortOptimized(int arr[], int n); void bubbleSortAdvanced(int arr[], int n); void printArray(int arr[], int size); void generateRandomArray(int arr[], int n); void copyArray(int source[], int dest[], int n); void comparePerformance(int arr[], int n);
void bubbleSort(int arr[], int n) { int i, j, temp; for (i = 0; i < n - 1; i++) { for (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; } } } }
void bubbleSortOptimized(int arr[], int n) { int i, j, temp; bool swapped;
for (i = 0; i < n - 1; i++) { swapped = false; for (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; } }
void bubbleSortAdvanced(int arr[], int n) { int i, j, temp; int lastSwapPos = 0; int sortBorder = n - 1;
for (i = 0; i < n - 1; i++) { bool isSorted = true;
for (j = 0; j < sortBorder; j++) { if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; isSorted = false; lastSwapPos = j; } }
sortBorder = lastSwapPos; if (isSorted) break; } }
void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); }
void generateRandomArray(int arr[], int n) { srand(time(NULL)); for (int i = 0; i < n; i++) { arr[i] = rand() % 100; } }
void copyArray(int source[], int dest[], int n) { for (int i = 0; i < n; i++) { dest[i] = source[i]; } }
void comparePerformance(int arr[], int n) { int arr1[n], arr2[n], arr3[n]; clock_t start, end; double cpu_time_used;
copyArray(arr, arr1, n); copyArray(arr, arr2, n); copyArray(arr, arr3, n);
printf("性能比较 (数组大小: %d):\n", n); printf("----------------------------------------\n");
start = clock(); bubbleSort(arr1, n); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("基础版本耗时: %.6f 秒\n", cpu_time_used);
start = clock(); bubbleSortOptimized(arr2, n); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("优化版本耗时: %.6f 秒\n", cpu_time_used);
start = clock(); bubbleSortAdvanced(arr3, n); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("高级优化版本耗时: %.6f 秒\n", cpu_time_used); printf("----------------------------------------\n"); }
int main() { int choice, n;
printf("C语言冒泡排序算法演示程序\n"); printf("=====================================\n");
while (1) { printf("\n请选择操作:\n"); printf("1. 手动输入数组并排序\n"); printf("2. 随机生成数组并排序\n"); printf("3. 性能测试\n"); printf("4. 退出程序\n"); printf("请输入选择 (1-4): "); scanf("%d", &choice);
switch (choice) { case 1: { printf("请输入数组大小: "); scanf("%d", &n); int arr[n];
printf("请输入 %d 个整数:\n", n); for (int i = 0; i < n; i++) { scanf("%d", &arr[i]); }
printf("\n原始数组: "); printArray(arr, n);
bubbleSortOptimized(arr, n);
printf("排序后数组: "); printArray(arr, n); break; }
case 2: { printf("请输入数组大小: "); scanf("%d", &n); int arr[n];
generateRandomArray(arr, n);
printf("\n原始数组: "); printArray(arr, n);
bubbleSortOptimized(arr, n);
printf("排序后数组: "); printArray(arr, n); break; }
case 3: { printf("请输入测试数组大小: "); scanf("%d", &n); int arr[n];
generateRandomArray(arr, n); comparePerformance(arr, n); break; }
case 4: printf("感谢使用,再见!\n"); return 0;
default: printf("无效选择,请重新输入!\n"); } }
return 0; }
|