冒泡法原理及实现

冒泡法原理及实现冒泡法原理及实现第一次接触排序算法,简单写一下实现原理。先看一道例题:用户输入十个数据,将数据从大到小输出。输入样例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)
上一篇 2022年10月19日 下午2:46
下一篇 2022年10月19日 下午2:46


相关推荐

  • SwaggerUI初探

    SwaggerUI初探SwaggerUI 介绍 SwaggerUI 是我们小组在做课程作业 前后端交互需要 API 文档时 我无意间发现的一个工具 借助 SwaggerUI 我们可以便捷的获得类似下方的可视化图形界面 之后 我们便可以根据此 API 文档 进行开发 SwaggerUI 允许任何人 无论是你的开发团队还是最终用户 在没有任何实现逻辑的情况下对 API 资源进行可视化和交互 它 API 文档 通过 Swagg

    2026年3月19日
    2
  • 连接kafka报错:1 partitions have leader brokers without a matching listener「建议收藏」

    连接kafka报错:1 partitions have leader brokers without a matching listener「建议收藏」服务输出部分错误日志截图2020/12/25下午2:32:442020-12-2514:32:44.320WARN[tag-service,,,]1—[ntainer#4-0-C-1]org.apache.kafka.clients.NetworkClient:[ConsumerclientId=consumer-5,groupId=statistic-processor]1partitionshaveleaderbrokerswithoutamatchi

    2022年6月26日
    174
  • bp神经网络及matlab实现_bp神经网络应用实例Matlab

    bp神经网络及matlab实现_bp神经网络应用实例MatlabBP神经网络通俗教程(matlab实现方法)黑色字体可看可不看,是帮助理解所用红色字体是比较重要的部分,必看BP神经网络是什么BP(Back-propagation,反向传播)神经网络是最传统的神经网络。当下的各种神经网络的模型都可以看做是BP神经网络的变种(虽然变动很大…)。这东西是干什么用的呢?我们在现实中要处理的一切问题映射到数学上只分为两类,可归纳的问题与不可归纳的问题。首先什么是不可归纳的问题,举个例子,你不能用一套完美的数学公式去表达所有的质数,因为目前的研究表明,还没有什么方法

    2025年10月31日
    4
  • 格雷码介绍与应用

    格雷码介绍与应用学过晶体管知识的朋友们都知道 数据位跳变就相当于硬件电路中的晶体管翻转 许多位同时跳变就相当于多个晶体管同时翻转 会导致电路中出现很大的尖峰电流脉冲 从而导致数据不稳定 格雷码 GrayCode 不同于我们常用的二进制编码 它只是一种无权码 连算术编码都算不上 其重要特征是一个数变为相邻的另一个数时 只有一个数据位发生跳变 由于这种特点 就可以避免电路中出现亚稳态而导致数据错误 简而言之 格雷码的一位改变特征减小了电路出错概率 实际很多场合也用到了格雷码 下表举例了 4 位格雷码 4 位二进制码以及十进制码的对

    2026年3月19日
    2
  • WinExec执行批处理命令

    WinExec执行批处理命令proceduredeleteDirtyRz;varstr:string;beginstr:=’del’+appPath+’USedLog\*.log’;WinExec(PChar(‘cmd.exe/c’+str),SW_HIDE);end;加了/c参数后它将运行/c后面的命令不加参数的话,它只执行CMD命令.解析:doc输入:CMD/?启…

    2022年7月11日
    16
  • 回归分析(stata实例详细解答过程)[通俗易懂]

    回归分析(stata实例详细解答过程)[通俗易懂]现有某电商平台846条关于婴幼儿奶粉的销售信息,每条信息由11个指标组成。其中,评价量可以从一个侧面反映顾客对产品的关注度。请对所给数据进行以下方面的分析,要求最终的分析将不仅仅有益于商家,更有益于宝妈们为宝贝选择适合自己的奶粉。(1)以评价量为因变量,分析其它变量和评价量之间的关系。(2)以评价量为因变量,研究影响评价量的重要因素。我们运用stata软件解决此问题。第一问在第一问中要求我们,以评价量为因变量,分析其它变量和评价量之间的关系。我们在这里用回归分析,…

    2022年8月30日
    5

发表回复

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

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