对冒泡排序这个算法简单的理解

  学过C/C++的朋友们肯定会经常接触算法这个东西,算法有很多种类,但最基础的是排序算法,其中有一种算法是冒泡排序。

冒泡怎么实现的?

  冒泡排序是双重循环,时间复杂度是O(N2),相比较其他排序算法,算是较高的了
时间复杂性:又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。
  废话少说,实验步骤如下:
在这里插入图片描述
  首先左图的代码一般的冒泡排序模板如下:

int main()
{   
int i,j,n,temp,a[n];     
scanf("%d",&n); //输入一个数n     
for(i=1;i<=n;i++) //循环读入n个人的身高         
scanf("%d",a[i-1]); 
    //按身高从高到低进行排序     
    for(i=1;i<=n-1;i++)      
    {         
    	for(j=1;j<=n-i;j++)         
    	{             
    		if(a[j-1]<a[j])//对分数进行比较             
    			{  	t=a[j-1]; 
    				a[j-1]=a[j]; 
    				a[j]=t;  
    			}         
    	}     
    }     
    for(i=0;i<n;i++)//输出身高         
    	printf("%d ",a[i]); 

其中n可以改成9
在这里插入图片描述
  以上可以这么排序以此从小到大排序,如果你想从大到小排序,可以把a[j]>a[j+1]条件改成a[j]<a[j+1],那样的结果就是从大到小排序。
在这里插入图片描述
  当开始运行时候,首先从main开始直至遇到j=0处时候,都是没有变化。

在这里插入图片描述
  但在遇到j<9-i(至于为什么是9-i稍后再解释)判断语句之后,j开始循环8次(这里也是稍后解释),在循环的时候如果两相邻的数字不符合左小右大这样的规律,则两个相邻的数字会先交换,然后循环一次(内存演示中的柱形图的红色数字就是被交换的数字)

在这里插入图片描述
  第二次循环时候我们可以发现被交换的数字往右迁移了,这是因为这些是一维数组的,j循环时候会增加j的值,也会往右不断运行比较排序,故按上一张图的描述逻辑来想,这两个数字要是也不符合左小右大的规定,也会被交换,从而继续循环,直至遇到最后一个数字。

在这里插入图片描述
  从上图中的被圈出来的蓝色数字,我们可以发现他是最大的数字,此时j已经循环了8次,完成了一次最高数字往后放的目标,然后i增加,j继续从0开始循环直至为7,此时蓝色数字已经排好了,所以只需要循环7次就能完成第二高数字往后放的目的,按照这样的逻辑继续循环下去,直至所有最高的数字已经往后排好了

在这里插入图片描述
  以上就是第二个最高数字排好的状态
  最后排好的时候会结束循环从而结束整个算法。
在这里插入图片描述

以上就是今天的实验过程,如果你感兴趣请点赞并且关注哟👍
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长高

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值