排序算法(1):冒泡排序

这篇具有很好参考价值的文章主要介绍了排序算法(1):冒泡排序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • (꒪ꇴ꒪ ),Hello我是祐言QAQ
  • 我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP🌍
  • 快上🚘,一起学习,让我们成为一个强大的攻城狮!
  • 送给自己和读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!
  • 作者水平很有限,如果发现错误,请在评论区指正,感谢🙏

         在计算机科学领域,排序算法是一个重要的主题。冒泡排序法是最基础且简单的排序算法之一,它的原理简单易懂,是学习排序算法的理想起点。本文将详细介绍冒泡排序法的原理、实现方法以及优化技巧,帮助读者全面了解和掌握这一经典算法。

一、冒泡排序原理

        冒泡排序(Bubble Sort)是一种简单且基础的排序算法。它通过多次比较和交换相邻元素来将一个序列按照升序或降序进行排序。冒泡排序法的核心思想是通过相邻元素的比较和交换,逐步将最大(或最小)的元素“冒泡”到序列的末尾。具体而言,算法从序列的第一个元素开始,比较它与下一个元素的大小关系,如果顺序不符合要求,则交换它们的位置。通过多轮遍历,每一轮都将当前未排序部分的最大(或最小)值冒泡到最后。冒泡排序的时间复杂度为O(n^2),其中n是序列的长度。

二、冒泡排序法的实现

        下面我们以升序排序为例,详细介绍冒泡排序法的实现步骤:
         1.初始化序列和标志位:
        (1)定义一个包含待排序元素的序列;
        (2)设置一个标志位,用于判断是否进行了交换操作。
         2.进行多轮遍历:
        (1)外层循环控制总共需要进行的轮次,从0到n-1。
        (2)内层循环用于每一轮的比较和交换操作,从0到n-1-i,其中i是当前轮次。
        3.比较相邻元素并交换:
        (1)比较当前元素和下一个元素的大小关系。
        (2)如果当前元素大于下一个元素,则交换它们的位置。
        4.标志位优化:如果一轮遍历中没有进行过交换操作,说明序列已经有序,可以提前结束排序。
        5.返回排序后的序列。

三、冒泡排序法的程序

        程序主要包括:定义了冒泡排序函数bubbleSort,以及在main函数中的数组初始化、打印排序前的数组、调用排序函数进行排序、打印排序后的数组等操作。它以最快的方法每次把元素放置末尾。

排序算法(1):冒泡排序,c语言基础,Linux基础,算法,数据结构,排序算法

         程序代码如下:

#include <stdio.h>

// 冒泡排序
void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {  // 外层循环控制遍历的轮次,共进行 size - 1 轮
        for (int j = 0; j < size - 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[] = {9, 5, 2, 7, 1, 6, 3, 8, 4};  // 待排序的数组
    int size = sizeof(arr) / sizeof(arr[0]);  // 数组的大小

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

    bubbleSort(arr, size);  // 调用冒泡排序函数进行排序

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

    return 0;
}

四、冒泡排序法的优化

        尽管冒泡排序法简单易懂,但在实际应用中对于大规模数据的排序效率较低。为了改进算法的性能,我们可以尝试一些优化方法:

        1.设置有序区域标记:在每一轮遍历中,记录最后一次发生交换的位置。这个位置之后的元素已经有序,不需要再比较。


        2.提前结束排序:在每一轮遍历中,如果没有进行过交换操作,说明序列已经有序,可以提前结束排序。


        3.双向冒泡排序:在每一轮遍历中,除了从左往右比较和交换,还可以从右往左进行一轮比较和交换。这样可以同时找到最大值和最小值,减少遍历次数。

        4.鸡尾酒排序:双向冒泡排序的一种变体,从左到右和从右到左交替进行遍历。适用于部分有序的序列。
        这些优化方法可以提高冒泡排序法的效率,但无论如何优化,冒泡排序的最坏情况时间复杂度仍然是O(n^2)。因此,在实际应用中,对于大规模数据的排序,我们通常会选择其他更高效的排序算法。

五、总结

        冒泡排序法作为最基础的排序算法之一,为我们理解和学习其他排序算法奠定了基础。通过深入理解冒泡排序法的原理、掌握实现方法以及了解优化技巧,我们可以更好地应用它,并能够更好地理解其他高级排序算法。尽管冒泡排序法在实际应用中的效率有限,但通过对排序算法的学习和探索,我们能够发现更多高效的算法。

        今天的分享就到这里啦~

排序算法(1):冒泡排序,c语言基础,Linux基础,算法,数据结构,排序算法

        更多C/C++语言Linux系统数据结构ARM板实战相关文章,关注专栏:

   手撕C语言

            玩转linux

                    脚踢数据结构

                            系统、网络编程

                                     探索C++

                                             6818(ARM)开发板实战文章来源地址https://www.toymoban.com/news/detail-525189.html

📢写在最后

  • 今天的分享就到这啦~
  • 觉得博主写的还不错的烦劳 一键三连喔~
  • 🎉🎉🎉感谢关注🎉🎉🎉

到了这里,关于排序算法(1):冒泡排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构算法练习 插入排序 冒泡排序

    插入排序 代码如下  package main import \\\"fmt\\\" func main() {     a := []int{4, 5, 6, 1, 3, 2}         b := insert(a)     for i := 0; i len(b); i++ {         fmt.Println(b[i])     } } func insert(a []int) []int {     if len(a) = 1 {                   如果数组长度小于等于1 不用排序直接返回          retur

    2024年02月08日
    浏览(36)
  • 2023届计算机保研面试基础专业问题(数据结构、算法、计算机语言、计算机网络、数据库、操作系统、数学)

    以下的专业相关基础问题,是在2022年暑期准备面试过程中,断断续续准备的,最终上岸厦大啦,也希望这些内容对后面准备保研的学弟学妹们有帮助。少即是多、快即是慢,希望大家也不必太焦虑,慢慢来比较快! 堆、栈、队列、链表等数据结构 树:红黑树、二叉树的各类

    2024年02月15日
    浏览(38)
  • 数据结构算法--2 冒泡排序,选择排序,插入排序

    思想就是将相邻元素两两比较,当一个元素大于右侧相邻元素时,交换他们的位置,小于右侧元素时,位置不变,最终序列中的最大元素,像气泡一样,到了最右侧。 这时冒泡排序第一轮结束,数列最右侧元素9的位置可认为是一个有序区,有序区目前有一个元素. 第二轮排序

    2024年02月13日
    浏览(36)
  • 【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占坑版 2.3前后指针版 2.4三数取中对快速排序的优化 2.5非递归版 3.归

    2024年02月08日
    浏览(35)
  • 【数据结构与算法】冒泡排序算法(BubbleSort)

    目录 1、缘起 2、BubbleSort 算法描述 3、用图示描述 BubbleSort 算法 4、C 语言描述 5、Python 语言描述  6、Java 语言描述  7、总结         冒泡排序算法 是一个非常经典的算法,它是各大网络编程平台上的座上宾,面试官口中的最爱。这个算法就是因其中数字从列表的开始向顶

    2024年02月03日
    浏览(36)
  • [ 数据结构 -- 手撕排序算法第二篇 ] 冒泡排序

    手撕排序算法系列之:冒泡排序。 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括 插入排序 , 冒泡排序 ,希尔排序,选择排序,堆排序,快速排序,归并排序等。 大家可以点击此链接阅读其他排序算法:排序算法_大合集(data-structure_Sort) 本篇主要来手撕冒

    2024年02月11日
    浏览(38)
  • 数据结构——C语言实现常见排序(插入排序、希尔排序、选择排序、堆排序、冒泡排序)

    现在是北京时间2023年6月23日13点19分,度过了一个非常愉快的端午节。由于刚从学校回家,一下子伙食强度直升了个两三个档次。这也导致我的肠胃不堪重负,我也准备等会去健身房消耗一下盈余的热量。回到家陪伴爷爷走人生最后的阶段才是我这个暑假最重要的事情。自从

    2024年02月10日
    浏览(33)
  • 直接插入排序、希尔排序、直接选择排序、堆排序、冒泡排序——“数据结构与算法”

    各位CSDN的uu们你们好呀,今天小雅兰的内容是数据结构与算法啦,是排序!!!下面,让我们进入七大排序的世界吧!!! 排序:所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在

    2024年02月15日
    浏览(44)
  • 『初阶数据结构 • C语言』④ - 冒泡排序

      本文内容借鉴一本我非常喜欢的书——《数据结构与算法图解》。学习之余,我决定把这本书精彩的部分摘录出来与大家分享。      本章内容 写在前面 1.冒泡排序 2.冒泡排序实战 3.冒泡排序的实现 4.冒泡排序的效率 5.二次问题 6.线性解决 7.总结     大 O记法能客观地衡量

    2024年02月16日
    浏览(31)
  • 【数据结构】常见排序算法——常见排序介绍、选择排序(直接选择排序、堆排序)交换排序(冒泡排序)

      选择排序是一种简单但不高效的排序算法,其基本思想是从待排序的数据中选择最小(或最大)的元素放到已排序的数据末尾。具体操作步骤如下: (1)找到数据中最小的元素,并把它交换到第一个位置; (2)在剩下未排序的元素中找到最小的元素,并把它交换到已排

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包