前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【数据结构】排序算法系列——冒泡排序(附源码+图解)

【数据结构】排序算法系列——冒泡排序(附源码+图解)

作者头像
Skrrapper
发布2024-09-12 12:24:38
2360
发布2024-09-12 12:24:38
举报
文章被收录于专栏:技术分享

冒泡排序

接下来我们要介绍的是排序算法中极为标志性,并且经常在教材中作为经典案例出现的——冒泡排序。

算法思想

冒泡排序(Bubble sort)的算法思想也是较为容易去理解的,我们参照冒泡这一物理现象,会发现,往往大的气泡都会往上运动,而小的气泡往往都在下方。冒泡排序的名字也就是这么由来的。它的算法步骤大致如下:

  1. 从数组的开头开始,将第一个数据与第二个数据进行比较,按照指定的比较思想(大的放前面or小的放前面)完成交换操作
  2. 再将此时的第二个数据与第三个数据再次进行步骤1中的操作,以此类推,直到比较完最后两个数据
  3. 此时的数组如果不是完全有序,那么从头开始进行步骤1和步骤2的操作,直到完全有序。
图解
C语言代码分析
代码语言:javascript
复制
void BubbleSort(int* a, int n)
{
	bool exchange = false;//标记是否发生交换
	for(int j=0;j<n;j++)
	{
		for (int i = 1; i < n-j; i++)
		{
			//如果前一个元素大于后一个元素,交换
			if (a[i - 1] > a[i])
			{
				int temp = a[i - 1];
				a[i - 1] = a[i];
				a[i] = temp;
			}
			if(exchange == false)//如果没有发生交换,说明此时已经有序,那么就直接跳出
			{
				break;
			}
		}
	}

}
时间复杂度

我们可以看出,实际上冒泡排序是华而不实的一种排序算法。它在数据较少或者较为有序的时候,可以有很好的效率,但是一旦数据多起来或者较为无序,那么需要重复的次数就会大幅度增加,从而后期乏力,效率降低。

  • 在序列完全有序时,冒泡排序只需遍历一遍数组,不用执行任何交换操作,时间复杂度为O(n)
  • 在最坏情况下,冒泡排序要执行**(n-1)n/2次交换操作,时间复杂度为O(n2)**。
  • 冒泡排序的平均时间复杂度为O(n2)
稳定性

鉴于冒泡排序不会改变前后元素的相对位置,所以:稳定

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 冒泡排序
    • 算法思想
      • 图解
        • C语言代码分析
          • 时间复杂度
            • 稳定性
            相关产品与服务
            腾讯云代码分析
            腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档