排序方法是一种重要的,基本的算法。
我相信很多人学习的第一个排序算法就是冒泡排序。可是有很多人(包括作者本人)在开始学冒泡排序时,总是会有这种感觉------明明一听就懂,为何就是写不出代码!!归根结底时没有去深入它。
何为冒泡
生活中的冒泡
请大家想象一口大锅,里面装满了水,现在我来给它加热;我们会看到锅底开始冒出小泡泡,随后小泡泡变大,向上升;锅底又冒出一个小泡泡,又变大,同时最初的那个小泡泡会更大;循环往复,我们就得到了一串从下往上依次变大的泡泡。
程序冒泡图文解
我们先来看一组由大小不同的数字组成的无序数列。
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;
}
能看到这,说明你是个爱学习的人,如果我文章中有不旦之处,请私信作者,我会尽快改正,我会感谢您宝贵的意见。若这篇文章对您有些许的帮助,我会欣喜不已,也请您点赞收藏,让更多人看到这篇文章。
标签:泡泡,temp,代码,冒泡排序,-----,冒泡,比较 From: https://blog.csdn.net/ice_typ2024/article/details/143780996