044. 编写冒泡排序算法

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,比较相邻的两个元素,并在必要时交换它们的位置。这个过程会持续进行,直到数组完全排序为止。冒泡排序的时间复杂度为 O(n2),因此它适用于小规模数据的排序。

C语言实现冒泡排序

#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    int i, j, temp;
    int swapped; // 用于优化冒泡排序,检测是否发生了交换

    for (i = 0; i < n - 1; i++) { // 外层循环控制排序的轮数
        swapped = 0; // 每一轮开始时,假设数组已经有序
        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 = 1; // 发生了交换,标记为1
            }
        }
        // 如果在这一轮中没有发生交换,说明数组已经有序,可以提前结束排序
        if (swapped == 0) {
            break;
        }
    }
}

// 打印数组的函数
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("原始数组:\n");
    printArray(arr, n);

    bubbleSort(arr, n); // 调用冒泡排序函数

    printf("排序后的数组:\n");
    printArray(arr, n);

    return 0;
}

代码说明

  1. 冒泡排序函数 bubbleSort

  2. 外层循环控制排序的轮数,每一轮将最大的元素“冒泡”到数组的末尾。

  3. 内层循环负责比较相邻的两个元素,并在必要时交换它们的位置。

  4. 使用了一个变量 swapped 来记录每一轮是否发生了交换。如果没有发生交换,说明数组已经有序,可以提前结束排序。

  5. 打印数组函数 printArray

  6. 用于打印数组的内容,方便查看排序前后的结果。

  7. 主函数 main

  8. 定义了一个待排序的数组 arr

  9. 调用 bubbleSort 函数对数组进行排序。

  10. 打印排序前后的数组。

示例运行

输入:

原始数组:
64 34 25 12 22 11 90

输出:

排序后的数组:
11 12 22 25 34 64 90

冒泡排序的特点

  1. 简单易实现:冒泡排序的逻辑简单,实现起来容易。
  2. 稳定性:冒泡排序是一种稳定的排序算法,即相等元素的相对顺序不会改变。
  3. 时间复杂度:最坏情况下(数组完全逆序)的时间复杂度为 O(n2)。最好情况下(数组已经有序)的时间复杂度为 O(n),通过优化(swapped 标志)可以实现。
  4. 空间复杂度:冒泡排序的空间复杂度为 O(1),因为它只需要一个额外的变量用于交换。

视频讲解

BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)