秒懂-----冒泡排序

排序方法是一种重要的,基本的算法。

我相信很多人学习的第一个排序算法就是冒泡排序。可是有很多人(包括作者本人)在开始学冒泡排序时,总是会有这种感觉------明明一听就懂,为何就是写不出代码!!归根结底时没有去深入它。

何为冒泡

生活中的冒泡

请大家想象一口大锅,里面装满了水,现在我来给它加热;我们会看到锅底开始冒出小泡泡,随后小泡泡变大,向上升;锅底又冒出一个小泡泡,又变大,同时最初的那个小泡泡会更大;循环往复,我们就得到了一串从下往上依次变大的泡泡。


程序冒泡图文解

我们先来看一组由大小不同的数字组成的无序数列。

9 8 10 34 5 7;

从第一个数字开始,每相邻的两个数相比较,若前一个数比后一个数大,则把比较大的数放在与它比较的小数的位置上,然后再让这个较大的数与下一个相邻的数相比较。

我们先来比较一趟,如下图



聪明如你,肯定已经发现,我们比了5次,而且可以看到第一趟,最大的泡泡跑到了最下面(最大的数)。

那么第二趟呢,由于最大的已经在最后了,我们只需要比较前面5个数即可;不妨单拿出来8 9 10 5 7 ,重复上面的操作,如下图



第三趟,第四趟,到第五趟,第五趟后,只剩下一个最小的泡泡(最小的数),就不用再进行比较了。

每一趟的最后,最大的数都会跑到最下面去。

整个过程的图如下



C语言代码

#include<stdio.h>
#define N 5
//宏定义这里使用宏定义的方式将N定义为常量 4,在后续代码中凡是出现N的地方,
//都会被预处理器替换为 4。其好处在于方便代码的维护和修改,
//如果后续需要改变数组的大小,只需要修改这一处宏定义的值即可,无需在代码中到处去修改涉及数组大小的数字。
int main()
{
	int a[N],i,j,temp;
	for(i=0;i<N;i++)
		scanf("%d",&a[i]);
	for(i=0;i<N;i++)//进行比较的趟数
	{
		for(j=0;j<N-1-i;j++)
		{
			//数字交换
			if(a[j]>a[j+1]){
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
		
	}
	//输出排好序的数组
	for(i=0;i<N;i++)
		printf("%d ",a[i]);
	return 0;
}

能看到这,说明你是个爱学习的人,如果我文章中有不旦之处,请私信作者,我会尽快改正,我会感谢您宝贵的意见。若这篇文章对您有些许的帮助,我会欣喜不已,也请您点赞收藏,让更多人看到这篇文章。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值