Skip to content

冒泡排序简介及其 C 语言实现

Posted on:2024年6月17日 at 10:25

冒泡排序(Bubble Sort)是一种简单且直观的排序算法。其基本思想是通过重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换它们的位置。这个过程持续进行,直到没有需要交换的元素为止,从而使得数列按顺序排列。

冒泡排序得名于其排序过程中元素逐渐“冒泡”到数列的顶部。虽然冒泡排序的效率较低,其时间复杂度为 (O(n^2)),但其概念简单,易于理解和实现,适合用于小规模数据排序。

冒泡排序的工作原理

  1. 比较相邻元素:从数列的起始位置开始,依次比较相邻的两个元素。如果前一个元素比后一个元素大,就交换它们的位置。
  2. 逐渐缩小范围:每一轮比较结束后,最大的元素会被移到数列的最后一个位置。然后在剩下的部分(除去已排序部分)继续进行比较。
  3. 重复上述步骤:重复上述过程,直到数列中没有需要交换的元素为止。

冒泡排序的C语言实现

下面是一段实现冒泡排序的C代码,演示了如何对一个整数数组进行排序:

#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    int i, j;int i, j;
    // 外层循环控制冒泡排序的轮数
    for (i = 0; i < n-1; i++) {
        // 内层循环控制每一轮的比较和交换
        for (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;
            }
        }
    }
}

// 打印数组
void printArray(int arr[], int size) {
    int i;
    // 遍历数组并打印每个元素
    for (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函数:该函数接受一个整数数组和数组的大小作为参数。通过两层嵌套的for循环实现冒泡排序,其中内层循环负责比较和交换相邻的元素,外层循环控制排序的轮数。
  2. printArray函数:该函数用于打印数组的元素,方便我们查看排序前后的数组。
  3. main函数:程序的入口,初始化一个待排序的数组,调用bubbleSort函数进行排序,并使用printArray函数打印排序前后的数组。

运行结果

如果运行上述程序,输出结果如下:

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

通过这段代码,我们可以清楚地看到冒泡排序的全过程及其效果。尽管冒泡排序在效率上不如一些高级排序算法(如快速排序、归并排序),但其简单性使其成为学习排序算法的入门选择。