冒泡法原理及实现

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


相关推荐

  • Android自定义动态壁纸,Android自定义动态壁纸开发详解

    Android自定义动态壁纸,Android自定义动态壁纸开发详解看到有些手机酷炫的动态壁纸 有没有好奇过他们是如何实现的 其实我们自己也可以实现 一 动态壁纸原理如果你了解使用过 SurfaceView 的话 那么开发一款动态壁纸对你来说其实非常简单 动态壁纸的本质其实就是一个服务在维护一个动态壁纸引擎 Engine 所以我们看到的动态效果其实是通过这个引擎画出来的 而维护这个引擎的服务 就是 WallpaperSer 本篇文章并不讨论内部实现原理 只是让大家

    2026年3月17日
    1
  • python写一个完整的小程序_写一个python小程序[通俗易懂]

    python写一个完整的小程序_写一个python小程序[通俗易懂]在windows环境下进行操作window+R输入cmd创建一个文件夹mkdirpytxt创建一个py文件py.py用notepad或者记事本等工具进行编辑或首先声明python3.5以后没有中文乱码,已经支持中文,就像java的jdk1.6以后都支持中文一样。进入python交互环境下然后可以进行数据运算,下面命令是简单的加、减、乘、除下面看一下python2.0版本的中文运行P…

    2022年6月18日
    34
  • 二叉树层序遍历Java实现「建议收藏」

    二叉树层序遍历Java实现「建议收藏」publicclassNode{privateintvalue;privateNodelchild;privateNoderchild;publicintgetValue(){returnvalue;}publicvoidsetValue(intvalue){this.value=value;}

    2022年5月11日
    34
  • JS数组删除指定下标元素「建议收藏」

    JS数组删除指定下标元素「建议收藏」splice方法——Array.splice(index,n)参数语义化理解:删除以下标index为起点的n个元素。(之后的元素会往前移动)

    2026年4月16日
    8
  • 聊聊页面中的锚点效果和回到顶部

    聊聊页面中的锚点效果和回到顶部页面中的锚点各位想必都 了如指掌 其基于 a 链接 同页面跳转 和 id 属性标签的历史问题 可能有人不知道的是 HTML 中的 id 非常神奇 id 属性的元素不仅可以在 js 中直接使用 而不必先获取 还可以和 url 相关联 直接用 id 访问是旧版本 js 遗留下来的特性 浏览器会建立 window 实例的 id 同名属性 这是为了兼容旧的网页 但不要依赖这个特性 在含有特殊字符或者和 window 实例的其他属性有冲突时可能失效 我们都知道 锚点应该这样用 ahref 这里写 号 id 名 去这里 amp l ahref 这里写 号 id 名

    2026年3月20日
    1
  • 使用cef3开发的浏览器不支持flash问题的解决

    使用cef3开发的浏览器不支持flash问题的解决开发浏览器时遇到了flash的问题,网上搜了下,解决的方法基本是加npapi、ppapi,一开始奔着ppapi去的,没有解决,后来用的npapi,在项目的output下新建plugins文件夹,将NPSWF32_22_0_0_209.dll拷入到文件夹下。问题解决。

    2022年6月9日
    36

发表回复

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

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