冒泡排序的C语言

寒羽鹿

关注

阅读 30

07-11 06:00

下面是冒泡排序的C语言实现,包含基础版本和优化版本(添加了交换标志位):

#include <stdio.h>

// 基础冒泡排序
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换 arr[j] 和 arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

// 优化版冒泡排序(添加交换标志位)
void optimizedBubbleSort(int arr[], int n) {
    int swapped;
    for (int i = 0; i < n - 1; i++) {
        swapped = 0;  // 重置标志
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换 arr[j] 和 arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = 1;  // 标记发生了交换
            }
        }
        // 如果本轮没有交换,说明已经有序,提前结束
        if (swapped == 0) break;
    }
}

// 测试代码
int main() {
    int arr[] = {5, 2, 4, 1, 3};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    // 使用基础冒泡排序
    // bubbleSort(arr, n);
    
    // 使用优化版冒泡排序
    optimizedBubbleSort(arr, n);
    
    printf("排序后的数组: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

代码解释

  1. 基础版本:通过两层循环,外层控制轮数(共n-1轮),内层比较相邻元素并交换。
  2. 优化版本:添加swapped标志位,若某轮未发生交换则提前结束,避免无效遍历。

复杂度分析

  • 时间复杂度:最坏情况O(n²),最好情况(已排序)O(n)(仅优化版)。
  • 空间复杂度:O(1)(原地排序)。

精彩评论(0)

0 0 举报