冒泡排序

冒泡排序

冒泡排序:本质在于交换,每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。

算法原理

这是一个无序数列:1、5、4、2、6、3,我们要将它按从小到大排序。按照冒泡排序的思想,我们要把相邻的元素两两比较,根据大小来交换元素的位置
在这里插入图片描述
首先开始第一轮比较

第一步:比较1和5,1比5小,顺序正确,元素位置不变

第二步:比较5和4,5比4大,顺序错误,交换元素位置
在这里插入图片描述
在这里插入图片描述
第三步:比较5和2,5比2大,顺序错误,交换元素位置
在这里插入图片描述
在这里插入图片描述
经过一轮比较后,6作为最大的元素到了序列的最右侧
在这里插入图片描述
接下来进行第二轮比较,从1和4开始比较,到最右边的3结束,6已经是有序的,不需要再参与比较

第二轮结束后,如下所示
在这里插入图片描述
第三轮结束后,如下所示
在这里插入图片描述
第四轮结束后,如下所示
在这里插入图片描述
第五轮结束后,如下所示
在这里插入图片描述
至此所有的元素都是有序的

实现交换两个数

#include <stdio.h>
int main()
{
	int a = 1, b = 2;
	int temp = a;
	a = b;
	b = temp;
	printf("a = %d, b = %d\n", a, b);
	return 0;
}
//输出结果
a = 2, b = 1

实现冒泡排序

整个过程执行n-1趟,每趟从左到右比较相邻的两个数,如果大的数在左边,则交换,当该趟结束时,该趟最大数被移动到当前剩余的最右边。

#include <stdio.h>
int main()
{
	int a[10] = {3, 1, 4, 5, 2}; 
	for(int i = 1; i <= 4; i++) //进行n-1趟
	{
		//第i趟时从a[0]到a[n-i-1]都与它们下一个数比较
		for(int j = 0; j < 5 - i; j++)
		{
			if(a[j] > a[j+1]) //如果左边的数更大,则交换a[j]和a[j+1]
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
	for(int i = 0; i < 5; i++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
1 2 3 4 5
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阳光开朗男孩

你的鼓励是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值