【排序 - 冒泡排序】

当我们谈论经典的排序算法时,冒泡排序(Bubble Sort)往往是最先被提及的一种。尽管它在实际应用中不太常见,但冒泡排序的简单易懂,有助于理解排序算法的基本原理和思想。

冒泡排序的基本原理

冒泡排序是一种基础的交换排序算法,其核心思想是通过反复交换相邻的两个元素,将较大(或较小)的元素逐步"浮"到数组的末端。这个过程类似于水泡在水中逐渐上升的过程,因而得名冒泡排序。

动图:

算法步骤

  1. 比较相邻元素:从数组的第一个元素开始,依次比较相邻的两个元素。
  2. 交换元素位置:如果顺序不对(例如,当前元素比下一个元素大),则交换它们的位置。
  3. 重复步骤:重复进行以上步骤,直到整个数组排序完成。每一轮排序会将当前未排序部分的最大元素"冒泡"到正确位置。

冒泡排序的代码实现(C语言)

下面是冒泡排序的C语言实现代码:

c 复制代码
#include <stdio.h>

void bubble_sort(int arr[], int n) {
    int i, j;
    for (i = 0; i < n-1; i++) {
        // 每轮遍历将第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;
            }
        }
    }
}

int main() {
    int arr[] = {5, 3, 8, 6, 2};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    printf("排序前:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    bubble_sort(arr, n);
    
    printf("排序后:");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    
    return 0;
}

代码解释

  • bubble_sort 函数实现了冒泡排序的核心逻辑。外层循环控制排序的轮数,内层循环逐个比较并交换相邻元素。
  • main 函数中展示了如何调用 bubble_sort 函数来对一个整型数组进行排序,并输出排序前后的数组内容。

时间复杂度

冒泡排序的时间复杂度为 O(n^2),其中 n 是数组的长度。这是因为在最坏情况下,需要进行 n-1 轮比较,每轮比较又需要进行 n-i-1 次交换操作。

总结

冒泡排序虽然简单且易于理解,但在实际应用中,由于其时间复杂度较高,对大规模数据排序时效率不高。然而,通过学习冒泡排序,我们可以更好地理解排序算法的基本思想和算法复杂度分析,为后续学习更高效的排序算法奠定基础。

希望通过本文的介绍和代码示例,你对冒泡排序有了更清晰的理解!

相关推荐
海石40 分钟前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石40 分钟前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry3 小时前
LeetCode 151. 反转字符串中的单词
算法
gugucoding3 小时前
31. 【C语言】堆栈与队列的实现
c语言·开发语言·数据结构·链表
ChaoZiLL5 小时前
我的数据结构3——链表(link list)
数据结构·链表
a1117765 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜5 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry5 小时前
LeetCode 541. 反转字符串 II
算法
Jerry6 小时前
LeetCode 344. 反转字符串
算法
搞科研的小刘选手6 小时前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议