0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

冒泡排序算法原理

电子工程师 来源:lp 2019-03-29 16:57 次阅读

冒泡法是一种简单的排序方法,它的实现非常简单。首先对n个项目进行扫描,比较相领两个项目的大小,若发现违背大小次序则进行互换,由此可以使n个项目中的最大者换到最后。

然后对剩下的未排序好的项目再进行扫描,使它们的最大者换到表的最后。以此类推,直到将表全部排序好为止。这种排序方法,每遍扫描以后,都缩短了待排序表的长度,如果在某次扫描过程中,没有发现交换,则排序结束。

冒泡排序算法原理

1、从后往前依次比较相邻的元素。若是要按照升序排序,则后面的元素比前面的小,就交换这2个元素;降序则相反。

2、对每一对相邻元素作同样的工作,从第一对到最后一对。进行一轮比较交换下来,最后的元素就会是最小(或最大)的数了,这个数就不用参与后面的比较操作了。

3、针对所有的元素重复以上的步骤。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

为了尽量缩短待排序表的长度,避免下一次扫描中可能出现的不必要的比较,在每次扫描过程中,一方面要记录进行元素交换的次数,另一方面要记住在本次扫描中的最后一次进行交换的位置。在这个位置以后没有发生过交换,则说明在这个位置以后的元素实际上已经排好次序。

总的来说,冒泡法基本思想是重复的进行整个数组的排序,一次比较两个元素(两两排序),如果它们顺序不符合就交换,重复这样直到数列没有再需要交换的数为止(结束条件)。因为它就好像气泡一样,轻的气泡会往上漂浮,在不断漂浮的过程中,发生了两两交换过程,所以叫冒泡排序。

实例说明:

输入:待排序表L(1:n)。

输出:有序表L(1:n)。

PROCEDURELBUBSORT(L,N)

F←n

WHILEF>0DO

{k←F-1:F←0

FORj=1TOkDO

{IFL(j)>L(j+1)THEN

{L(j)与L(j+1)交换:F←j}

}

}

RETURN

在这个算法中,k代表在每次扫描过程中需要进行经较的项目数;当F>0时,表示还需要进行扫描比较,并且,它的数值表示上一次扫描中发生最后一次交换的位置。由上例可知,在最坏情况下,冒泡排序法需要进行n-1遍扫描,共要作[n(n-1)]/2次比较和元素的交换。但这个工作量并不是必需的,一般情况下要小于这个工作量。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 排序
    +关注

    关注

    0

    文章

    31

    浏览量

    9704
  • 排序算法
    +关注

    关注

    0

    文章

    52

    浏览量

    10051

原文标题:冒泡法排序

文章出处:【微信号:NeXt8060,微信公众号:HALCON图像处理与机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA排序-冒泡排序介绍

    排序算法是图像处理中经常使用一种算法,常见的排序算法有插入排序、希尔
    发表于 07-17 10:12 1060次阅读
    FPGA<b class='flag-5'>排序</b>-<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>介绍

    数据结构与算法:[8.5.1]--冒泡排序算法(1)#硬声创作季

    数据结构与算法
    学习硬声知识
    发布于 :2022年12月25日 21:15:21

    数据结构与算法:[8.5.1]--冒泡排序算法(2)#硬声创作季

    数据结构与算法
    学习硬声知识
    发布于 :2022年12月25日 21:16:00

    数据结构与算法:[8.5.2]--冒泡排序算法举例(1)#硬声创作季

    数据结构与算法
    学习硬声知识
    发布于 :2022年12月25日 21:16:26

    数据结构与算法:[8.5.2]--冒泡排序算法举例(2)#硬声创作季

    数据结构与算法
    学习硬声知识
    发布于 :2022年12月25日 21:16:48

    Java面试指南21-上-冒泡排序算法分析

    JAVA
    电子学习
    发布于 :2023年01月16日 12:02:35

    冒泡排序

    package algorithms// 冒泡排序// 冒泡排序算法的运作如下:// 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    发表于 10-17 19:03

    华为笔试题大全(史上最齐全)

    ?constructor函数不能声明为虚函数。8.冒泡排序算法的时间复杂度是什么?时间复杂度是O(n^2)。9.写出float x 与“零值”比较的if语句。if(x>0.000001&&x
    发表于 06-23 08:49

    华为笔试题大全分享

    都是平衡二叉树 且左右子树的深度差值的绝对值不大于1。6.堆栈溢出一般是由什么原因导致的?没有回收垃圾资源。7.什么函数不能声明为虚函数?constructor函数不能声明为虚函数。8.冒泡排序算法
    发表于 07-01 18:26

    static的作用是什么

    ,是什么区别?什么是平衡二叉树?堆栈溢出一般是由什么原因导致的?冒泡排序算法的时间复杂度是什么?什么函数不能声明为虚函数?队列和栈有什么区别?不能做switch()的参数类型局部变量能否和全局变量重名?如...
    发表于 10-27 06:22

    C语言冒泡、插入法、选择排序算法分析

    C语言冒泡、插入法、选择排序算法分析
    发表于 09-06 15:51 44次下载

    如何使用PIC单片机实现冒泡排序算法

    编写子程序paixu,实现1Byte数的顺序排列。待排序的10个二进制数(自定义数据大小)存放在内存空间内。
    发表于 07-31 17:35 1次下载
    如何使用PIC单片机实现<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    嵌入式面试常问问题

    ,是什么区别?什么是平衡二叉树?堆栈溢出一般是由什么原因导致的?冒泡排序算法的时间复杂度是什么?什么函数不能声明为虚函数?队列和栈有什么区别?不能做switch()的参数类型局部变量能否和全局变量重名?如...
    发表于 10-20 13:36 1次下载
    嵌入式面试常问问题

    php版冒泡排序是如何实现的?

    无论学习哪一种编程语言,进行算法方面的训练时都绕不开“排序”。排序在进阶编程中有非常广泛的应用,要想成为编程高手,排序算法是必须要掌握的。而
    的头像 发表于 01-20 10:39 888次阅读
    php版<b class='flag-5'>冒泡</b><b class='flag-5'>排序</b>是如何实现的?

    AI能帮我成为传说中的10x工程师吗?

    编程语言模型、代码生成工具的出现,让工程师们眼前一亮,不少开发者第一时间进行试用。现阶段的代码生成工具,也远远不止自动补全,不仅可以编写基础的冒泡排序算法、还可以写单元测试、代码注释这些占用开发者很多时间的重复工作。
    的头像 发表于 08-08 17:07 714次阅读
    AI能帮我成为传说中的10x工程师吗?