冒泡法原理及实现

冒泡法原理及实现冒泡法原理及实现第一次接触排序算法,简单写一下实现原理。先看一道例题:用户输入十个数据,将数据从大到小输出。输入样例13023560199-234578-200输出样例-200-23012330455678199这里使用冒泡法。别的排序目前我也不太会代码示例:#include<stdio.h>intmain(void){…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

冒泡法原理及实现

第一次接触排序算法,简单写一下实现原理。
先看一道例题:
用户输入十个数据,将数据从大到小输出。
输入样例 1 30 23 56 0 199 -23 45 78 -200
输出样例 -200 -23 0 1 23 30 45 56 78 199
这里使用冒泡法。别的排序目前我也不太会
代码示例:

#include<stdio.h>
int main(void)
{
    int num[11];
    int i,j;
    int temp;
    for(i=0;i<10;i++)
        scanf("%d",&num[i]);
    for(i=0;i<10-1;i++)				//这里只需进行九次循环,第十次的数已经是最小值,不需要进行排序 
        for(j=0;j<10-1-i;j++)		//这里只需进行n-i-1次排序,因为前i个数已经排好了序 
          if(num[j]>num[j+1])
          {
            temp=num[j];
            num[j]=num[j+1];
            num[j+1]=temp;
          }
    for(i=0;i<10;i++)
        printf("%d ",num[i]);
        
    return 0;
}

问题来了问什么叫冒泡

泡泡

画了一个示意图,大概是这么个意思(观察过气泡在水中上升的同学可能比较明白,这个问题应该是和压力有关?!)
在这里插入图片描述
经过一次循环已经能看出一些端倪。最大数字经过一次循环已经放置到数组的最后一位,这里就不赘述后面的相似循环了,相信读者已经能根据第一次循环想到后面的情况了。
下面我们来详细分析一下代码:
for(i=0;i<10-1;i++)
第一个循环很简单,就是要循环n-1次,可能有人会问,为什么是n-1次?因为每次循环都会把当前循环中的最大一位放到右端,在第n-1次放完后,数组最左端的数字已经是最小的,不需要n次循环。
for(j=0;j<10-i-1;j++)
第二个循环也很简单,循环n-i-1次,为什么是n-i-1?同上,右端经过一次比较就会替换成最大值,每次循环放置一个当前循环的最大值,所以循环完全不必要进行10次,减去已经放好的值的数量(执行一次放一个,执行i次就是i个)可以提高程序运行的速度。
if(num[j]>num[j+1])
{

temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
第二个循环中嵌套了一个if条件用于实现程序的关键,交换。
如果前一个值大于后一个值,就交换他们,这里注意,不能直接换值,
num[j]=num[j+1];
num[j+1]=num[j];
虽然我相信很少人会犯这种低级错误。但是还是要解释一下这里换值的实现方式:
可以想象如下场景,A杯子装有可乐,B杯子装有雪碧,我们要交换为A杯子装雪碧,B杯子装可乐。直接换是不可能的,相信读者已经能想到了,在拿一个新杯子。让可乐先装在新杯子里,再把A杯子里装上B中的雪碧,这时B杯子已经空出来了,把新杯子里的可乐装到B杯子中,就能完成。
这里换值的操作完全与上面的情景相同,temp就是我们拿来的新杯子。
for(i=0;i<10;i++)
printf(“%d “,num[i]);
最后的循环负责打印结果,这个没什么好说的。

这里也可以考虑一下如何让程序降序排列。
2018/11/9创建
2018/12/9修改

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180260.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java开发手册之安全规约

    Java开发手册之安全规约Java开发手册之安全规约

    2022年4月22日
    46
  • 煤矿井下电气作业培训考试题库_煤矿电工学题库

    煤矿井下电气作业培训考试题库_煤矿电工学题库题库来源:安全生产模拟考试一点通公众号小程序煤矿井下电气免费试题根据新煤矿井下电气考试大纲要求,安全生产模拟考试一点通将煤矿井下电气模拟考试试题进行汇编,组成一套煤矿井下电气全真模拟考试试题,学员可通过煤矿井下电气作业考试题库全真模拟,进行煤矿井下电气自测。1、【多选题】电气设备长期过载会扩展成()故障。(AC)A、短路B、欠压C、漏电D、断相2、【多选题】短路电流的大小与()有关。(BCDE)A、电动机的额定功率B、电缆的长度C、电缆的截面D、电网电压E、变压器

    2022年9月27日
    3
  • 什么是转发和重定向转发_转发和重定向的相同点

    什么是转发和重定向转发_转发和重定向的相同点通过代码和图解详细解释转发和重定向的区别。最后得出结论!

    2025年10月1日
    2
  • GPU利用率低的解决办法[通俗易懂]

    GPU利用率低的解决办法[通俗易懂]watch-n0.1-dnvidia-smi#检查GPU利用率参数解决办法:1.dataloader设置参数2.增大batchsize3.减少IO操作,比如tensorboard的写入和打印。4.换显卡

    2022年6月30日
    236
  • 【企业】掌握理查德·费曼学习法,提高学习效率

    【企业】掌握理查德·费曼学习法,提高学习效率强大的学习能力,可以让你更好地应对复杂多变的世界!1、理查德·费曼理查德·菲利普斯·费曼(RichardPhillipsFeynman),美国犹太裔理论物理学家,量子电动力学创始人之一,纳米技术之父。1965年获得诺贝尔物理学奖,从没有人怀疑过他超强、早熟的学习能力:小学刚毕业,他就开始学习初等微积分,在中学,他就学习了狭义相对论——要知道爱因斯坦提出狭义相对论的《论动体的电动力…

    2022年5月21日
    36
  • 服务器异常怎么解决_500服务器内部错误是什么原因

    服务器异常怎么解决_500服务器内部错误是什么原因http500内部服务器错误怎么办?现在有很多站长在建站的时候会遇到网站无法正常显示网页的问题,这些原因有很多,可能是域名解析除了问题,也可能是服务器不稳定,或者是http500内部服务器错误,http500内部服务器错误的意识就是你访问的网站服务器有问题,这里新网小编为大家介绍http500内部服务器错误怎么办。http500最可能的缘由是:该网站正在停止维护;该网站有…

    2022年8月12日
    7

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号