冒泡法原理及实现

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


相关推荐

  • pycharm中安装与配置pyqt5

    pycharm中安装与配置pyqt5pyqt5 安装与 pycharm 配置 1 在 pycharm 里面添加 PyQt5 pyqt5 tools2 校验是否成功 FileName PyQtDemo py Author Adil DateTime 2018 2 111 07 SoftWare PyCharmfromP QtGuiimports QtWidgets QApplication sys argv window QtWidgets

    2026年3月27日
    2
  • layui的layer弹出层和form表单

    layui的layer弹出层和form表单文章目录弹出层layerform表单增删改查所有代码如果想用layui来完成增删改查,那么要会用弹出层和form表单这两个组件是必须的,所以今天就来介绍一些如何用layui完成基本的增删改查弹出层layer因为layui的特性,每次不管使用哪个组件,都要先把它的模块加载出来比如我要用layer和form那么就需要先这样定义,你的操作都是在这个里面进行,当然页可以一次性加载所有模块,详情…

    2022年7月13日
    22
  • goeasy小demo

    goeasy小demo1 java 平台发布 1 1 引入 maven 依赖 极有可能会下载失败 自己手动下载 jar 包 lt repositories gt lt repository gt lt id gt goeasy lt id gt lt name gt goeasy lt name gt lt url gt http

    2026年3月18日
    1
  • Linux安装vim命令

    Linux安装vim命令最近在Linux上使用vim编辑器编写shell脚本的时候,遇到了这样一个问题,如下:-bash:vim:commandnotfound这是因为vim命令没有安装,于是我从网上搜索了很多关于安装vim命令的教程,不过大都比较繁琐,如今介绍一种简单的方法,大家可以试一下。首先,执行如下命令进行查询:rpm-qa|grepv…

    2025年8月11日
    4
  • SpringBoot整合Quartz定时任务(持久化到数据库)

    背景最近在做项目,项目中有个需求:需要使用定时任务,这个定时任务需要即时生效。查看Quartz官网之后发现:Quartz提供两种基本作业存储类型:RAMJobStore:RAM也就是内存,默认情况下Quartz会将任务调度存在内存中,这种方式性能是最好的,因为内存的速度是最快的。不好的地方就是数据缺乏持久性,但程序崩溃或者重新发布的时候,所有运行信息都会丢失JDBC作业存储:存到数据库…

    2022年4月9日
    82
  • 软件安装管家(2021年4月15更新)

    软件安装管家(2021年4月15更新)在网上看到许多小伙伴在问软件安装管家公众号为什么不能用了,在这里就把他们的一些资源整理出来分享给大家啦!各位观众老爷赶紧点赞收藏吧!软件导航①电脑系统 ②办公软件③图像处理④影视动画⑤AutoCAD⑥3D设计⑦机械设计⑧建筑设计⑨网页设计⑩开发编程⑪数据分析⑫仿真模拟⑬行业软件软件目录①电脑系统 安装环境PE工具箱Vmware(虚拟机)Windows10U盘安装win10直接安装win10虚拟机装win10Win10官方原版镜像文件下载地址汇总Windows7U盘安装win7直接安装

    2022年6月4日
    94

发表回复

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

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