初出茅庐的小李第13篇博客之嵌入式c语言实现冒泡排序

冒泡排序是个很经典的排序算法

小李学嵌入式C语言关于对冒泡排序的思考,这里记录一下;
冒泡排序最关键的还是轮数和交换次数的关系,其实经过分析可以得出最少的排序次数,和轮数,当然不同的写法也可以实现,只是要么轮数会多跑一趟,要么是交换的次数会变多一些在这里插入图片描述
这个图片是个动画版,老师给的我觉得对于理解交换还是很有帮助的,放上来大家一起欣赏这个图明显的是大的往后换是顺序排序;

 #include <stdio.h>


 int main(void)
{
	int a[10]={1,2,3,6,5,4,7,8,10,9};//初始化数组乱序
	int t;
	for(int i=0;i<10-1;i++)//冒泡排序的轮数控制0-8最多9次(n-1)
	{
		for(int j=0;j<10-1-i;j++)//冒泡排序的交换次序控制最多9次(n-1),最少1次
		{
			if(a[j]>a[j+1])//如果前面比后面的大则进行交换
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}              //实现顺序排序
		}
	}
	for(int i=0;i<10;i++)
	printf("%d ",a[i]);//格式化输出
	return 0;
}

运行结果如图
在这里插入图片描述

还有一种就是实现逆序排序

 #include <stdio.h>

 int main(void)
{
	int a[10]={1,2,3,6,5,4,7,8,10,9};//初始化数组乱序
	int t;
	for(int i=0;i<10-1;i++)//冒泡排序的轮数控制0-8最多9次(n-1)
	{
		for(int j=0;j<10-1-i;j++)//冒泡排序的交换次序控制最多9次(n-1),最少1次
		{
			if(a[j]<a[j+1])//如果前面比后面的小则进行交换
			{
				t=a[j];
				a[j]=a[j+1];
				a[j+1]=t;
			}              //实现逆序排序
		}
	}
	for(int i=0;i<10;i++)
	printf("%d ",a[i]);//格式化输出
	return 0;
}

运行结果如图:
在这里插入图片描述

下面是一些思考

当我把轮数改大之后发现依然可以进行,但是为了形成一个比较科学的学习和记忆我还是决定记住冒泡排序的最优写法;i<n-1;i<n-1-j;
i和j都是从0开始变化,这样交换的时候才能保证每个都可以进行,i控制的是冒泡的轮数,而j控制的是每次排序的交换的次数,因为这个会随着轮数的变大而变小,因为随着轮数的进行顺序也在慢慢的变整齐,交换的次数和排序的轮数相加是恒等于n的;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值