排序算法三:冒泡排序

马谦马谦马谦 数据结构和算法评论535字数 584阅读 1 分 56 秒阅读模式

一、原理

冒泡排序的原理很简单, 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序 (如从大到小、首字母从从 Z 到 A) 错误就把他们交换过来。 冒泡排序是一种稳定的排序算法。

冒泡排序不管在什么情况下,时间复杂度都是 O(\(n^2\)) 。

对比插入排序来说,在平均的情况下,插入排序性能是冒泡排序的两倍。

图例:

以数组 [54, 15, 34, 82, 15, 46, 85, 43] 为例:

排序算法三:冒泡排序-图片1

第一次循环先比较 54 和 15,54 大于 15,交换两个元素:

排序算法三:冒泡排序-图片2

比较 54 和 34,54 大于 34,交换两个元素:

排序算法三:冒泡排序-图片3

比较 54 和 82,54 不大于 82,不交换:

排序算法三:冒泡排序-图片4

比较 82 和 15,82 大于 15,交换两个元素:

排序算法三:冒泡排序-图片5

按照相同的方式一直对比,直到最后,85 被移动到最后:

排序算法三:冒泡排序-图片6

此时完成一轮冒泡排序,接下来将剩下的元素再次执行同样的操作即可完成对整个数组的排序。

二、代码实现

2.1 C++实现

2.2 python 实现

三、冒泡排序的优化

当对第 x 个数据排序时,冒泡排序每次都会遍历剩下的 n-x 个元素,即使整个序列已经有序。

因此可以在这一个层面进行优化,如果序列已经有序了,则后面的排序就无需进行了,可以添加一个标记字段来处理这个问题。

  最后更新:2020-2-7
马谦马谦马谦
  • 本文由 马谦马谦马谦 发表于 2018 年 3 月 3 日 23:53:30
  • 转载请务必保留本文链接:https://www.dyxmq.cn/program/algorithms/bubble-sort.html
排序算法四:梳排序 数据结构和算法

排序算法四:梳排序

一、梳排序简介 梳排序是冒泡排序的一种优化方案,主要是为了解决冒泡排序中的尾部小数值问题。它主要的思想是通过比较元素和固定步长位置上的数据,先进行部分优化,然后逐步减少步长,以此来对数据进行预处理。 ...
排序算法五:堆排序 数据结构和算法

排序算法五:堆排序

一、堆排序原理 通过最大堆的性质可以知道:一个堆中最大的元素总是在堆顶的,即数组下标 0 的位置。基于这一点,我们可以每次都把堆中的最大值提取出来,放到当前数组的后面。然后重新构建最大堆,重复这个过程,以...
排序算法七:计数排序 数据结构和算法

排序算法七:计数排序

一、计数排序 其基本思想为:假设 n 个输入的元素中的每一个都是在 0 到 k 之间的一个整数,对于每一个输入元素 x,确定小于 x 的元素个数,直接把 x 放在它输出的数组中的位置上。例如有 17 个元素小于 x,则 x 就应该在...
排序算法二:选择排序 数据结构和算法

排序算法二:选择排序

一、原理 选择排序 (Selection sort) 是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小 (或最大) 的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找...
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:
确定

拖动滑块以完成验证