首页 > 基础资料 博客日记

冒泡排序:初学者的必经之路

2025-01-13 21:30:07基础资料围观122

文章冒泡排序:初学者的必经之路分享给大家,欢迎收藏Java资料网,专注分享技术知识

🏝️专栏:算法专栏
🌅主页:猫咪-9527-CSDN博客 

“欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。”

目录

什么是冒泡排序?

冒泡排序的基本步骤:

示例讲解

冒泡排序的C语言实现

代码详解

程序运行结果

冒泡排序的特点

总结


对于初学C语言的程序员来说,学习排序算法是迈入编程世界的重要环节之一。在众多排序算法中,冒泡排序(Bubble Sort) 因其逻辑简单、易于实现的特点,被广泛推荐为初学者的入门选择。尽管它在实际应用中并不是最高效的排序方法,但它却是理解排序思想和算法优化的一个重要起点。


什么是冒泡排序?

冒泡排序是一种通过比较和交换相邻元素来实现排序的算法。它的名称来源于算法执行时较大的元素逐步“冒泡”到数组末尾的过程。每一轮排序中,算法会从头到尾比较相邻的元素,并根据它们的大小决定是否交换,直至所有元素按升序排列。

冒泡排序的基本步骤:

  1. 依次比较相邻的两个元素

    • 如果前一个元素比后一个元素大,就交换它们的位置。
    • 如果前一个元素小于或等于后一个元素,则不做任何操作。
  2. 重复以上过程

    • 每完成一轮排序,当前未排序部分中最大的元素会“冒泡”到末尾。
    • 数组中未排序的部分逐渐缩小,直到数组完全有序。
  3. 优化:提前退出

    • 如果在某一轮中没有发生任何交换,说明数组已经有序,可以提前结束排序过程。

示例讲解

假设有一个待排序的数组:{64, 34, 25, 12, 22, 11, 90},通过冒泡排序排序过程如下:

  • 第一轮:从头开始,两两比较并交换,最终“最大值”90移动到数组末尾。

    • 比较 64 和 34,交换 → {34, 64, 25, 12, 22, 11, 90}
    • 比较 64 和 25,交换 → {34, 25, 64, 12, 22, 11, 90}
    • 依次类推,直到 90 移动到末尾。
  • 第二轮:剩余的部分重复上述过程,次大的元素64被排到倒数第二位。

  • 如此往复,直至数组完全有序。


冒泡排序的C语言实现

下面是冒泡排序的完整C语言实现代码,包含优化以减少不必要的比较与交换。

#include <stdio.h>

// 冒泡排序函数
void bubbleSort(int arr[], int n) {
    for (int i = 0; i < n - 1; i++) { // 外层循环控制排序轮数
        int swapped = 0; // 标记本轮是否发生交换
        for (int 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;
                swapped = 1; // 标记发生了交换
            }
        }
        // 如果本轮没有发生任何交换,提前退出
        if (!swapped) {
            break;
        }
    }
}

// 主函数
int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90}; // 待排序的数组
    int n = sizeof(arr) / sizeof(arr[0]); // 计算数组长度
    
    printf("排序前的数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

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

    printf("排序后的数组:\n");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

代码详解

  1. 外层循环:控制排序的轮数,每轮将未排序部分中最大的元素移动到末尾。
  2. 内层循环:依次比较相邻元素,决定是否交换。
  3. 优化标记 swapped:如果某一轮中没有发生任何交换,说明数组已经有序,程序可以提前结束,提高效率。
  4. 输入输出:通过打印数组的排序前后状态,验证排序是否正确。

程序运行结果

以数组 {64, 34, 25, 12, 22, 11, 90} 为输入,程序的输出结果如下:


冒泡排序的特点

  1. 优点

    • 逻辑简单,适合初学者理解和实现。
    • 针对已经部分有序的数组效率较高,可通过优化提前结束。
  2. 缺点

    • 时间复杂度较高:最坏情况下需要比较 n×(n−1)/2 次,时间复杂度为 O(n^2)。
    • 不适合处理大规模数据。
  3. 适用场景

    • 小规模数据排序。
    • 学习和理解排序算法的基础。

总结

冒泡排序虽然不是最优的排序算法,但它是学习编程逻辑和算法思想的一个重要起点。通过冒泡排序,初学者可以掌握排序的基本思路,并为进一步学习更复杂的排序算法(如快速排序、归并排序)打下坚实基础。


文章来源:https://blog.csdn.net/2301_81831423/article/details/145066018
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云