算法之冒泡排序(C语言)

本文详细介绍了冒泡排序算法的工作原理,并提供了用C语言实现冒泡排序的代码示例,通过实例解析了排序过程,帮助读者深入理解冒泡排序的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                冒泡排序

  冒泡排序的基本思想:每次比较两个相邻的元素,如果它们的顺序错误就把它们交换过来。
Q:12 35 99 18 76这五个数从大到小排序。
A:越小越靠后,现在第一位是12,先将12和第二位35比较,序列变为35 12 99 18 76,然后12和99比较,序列变为35 99 12 18 76,继续比较,第一趟排序完成时,序列为35 99 18 76 12
然后开始第二趟,首先还是第一位和第二位比较,如果第一位比第二位小,交换,然后依次比较第二位和第三位,第三位和第四位,这时已经不需要比较第四位和第五位了,因为第五位已经归位了。
第三趟也是如此,第四趟的时候虽然因为巧合序列已排好,但是换一个序列可能就不成立了,所以还需要第四趟。
总结:如果有n个数进行排序,只需将n-1个数归位,也就是说要进行n-1趟操作。
Code:
#include<stdio.h>
int main()
{
	int a[100],i,j,t,n;
	scanf("%d",&n); //输入一个数,表示接下来有n个数
	for(i=1;i<=n;i++)//循环读入n个数到数组a中
	{
		scanf("%d",&a[i]);
	}
	//冒泡排序的核心部分
	for(i=1;i<=n-1;i++)//n个数排序,只能进行n-1趟
	{
		for(j=1;j<=n-1;j++)//从第一位开始比较直到最后一个尚未归位的数
		{
			if(a[j]<a[j+1])//比较大小并交换
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}
		}
	}
	for(i=1;i<=n;i++)//输出结果
	{
		printf("%d",a[i]);
	}
	return 0;
}

核心:双重嵌套循环
时间复杂度:O(N^2)   非常高的时间复杂度
解决上一个桶排序无法解决的问题,只需运用结构体,而解决时间复杂度的问题则需要快排。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值