《看聊天记录都学不会C语言?太菜了吧》(21)(必懂!题解)在现实生活中,打擂台比赛争名次竟用的是冒泡排序?

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我,若你是真心学习可以送你书籍,指导你学习,给予你目标方向的学习路线,无套路,博客为证。

本系列文章将会以通俗易懂的对话方式进行教学,对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新,包括别的语言以及实战都将使用对话的方式进行教学,基础编程语言教学适用于零基础小白,之后实战课程也将会逐步更新。

若有想学习的内容可以在评论区留言,根据大家的要求持续更新。点赞过十万就算化成灰我也更新下一篇。(肯定不到,也会更的。)

有问题也可以在评论区留言,也可以私聊我加我好友共同交流一起进步~

喜欢内容欢迎关注我、评论、点赞、收藏,这对我很重要,谢谢~


由于部分粉丝要求想要学python,就更了这个系列,我就算是生产队的驴、化成灰我C语言和python都一周6篇打底。可以关注我加我好友提你们想学的内容哟~

目录

《看聊天记录都学不会C语言?太菜了吧》(22)(必懂!题解 1-100 内素数)素数原来是质数!为什么你不早说!——(必懂!题解)求素数

《看聊天记录都学不会C语言?太菜了吧》(21)(必懂!题解冒泡排序)在现实生活中,打擂台比赛争名次竟用的是冒泡排序?——(必懂!题解)冒泡必懂

《看聊天记录都学不会C语言?太菜了吧》(20)(必懂!题解指定天数)我能知道2000年后的这个月一共有几天——(必懂!题解)我能知道2000年后的这个月一共有几天

《看聊天记录都学不会C语言?太菜了吧》(19)巩固开始,数字1、2、3、4能够组成多少个 3 位数的不同的排列——巩固1

《看聊天记录都学不会C语言?太菜了吧》(18)2分钟搞结构体——结构体

看聊天记录都学不会C语言?太菜了吧》(17)5分钟搞懂指针与多重指针——指针与多重指针

《看聊天记录都学不会C语言?太菜了吧》(16)我一直以为校花很漂亮,直到我叫了她一声…——生命空间、命名规则

《看聊天记录都学不会C语言?太菜了吧》(15)你学了一节课的函数我5分钟搞定了,还很熟——自定义函数传参、返回值

《看聊天记录都学不会C语言?太菜了吧》(14)这么神奇?我写了20行代码竟然一行就可以搞定?——自定义函数

《看聊天记录都学不会C语言?太菜了吧》(13)(9*9 乘法表)寻找电脑中的盲盒彩蛋——for 循环与循环嵌套 九九乘法表

《看聊天记录都学不会C语言?太菜了吧》(12)循环有多容易?你看一眼就怀…——循环

《看聊天记录都学不会C语言?太菜了吧》(11)2分钟领悟数组——数组

《看聊天记录都学不会C语言?太菜了吧》(10)程序媛聪明绝顶了——逻辑与运算符

《看聊天记录都学不会C语言?太菜了吧》(9)老公饼真的有老公送?——字符数组

《看聊天记录都学不会C语言?太菜了吧》(8)牛郎和织女竟有一个孩子?——多条件if

《看聊天记录都学不会C语言?太菜了吧(7)下一篇文章告诉你牛郎是谁——if逻辑判断

《看聊天记录都学不会C语言?太菜了吧(6)以前跟我说编程很难的给我站出来——浮点数及变量运算

《看聊天记录都学不会C语言?太菜了吧(5)打了一把游戏我学会了一个编程知识?——变量输出及占位符

《看聊天记录都学不会C语言?太菜了吧(4)原来我早就会编程了——变量

《看聊天记录都学不会C语言?太菜了吧(3)代码都在谈恋爱难道你不知道?——头文件及标点

《看聊天记录都学不会C语言?太菜了吧(2)我说编程很容易你们不服?——Devc使用及HelloWorld

《看聊天记录都学不会C语言?太菜了吧(1)我在大佬群里问基础问题没人理?——学习建议


我的其它教程

教程点击进去将会有目录

《看聊天记录都学不会Python到游戏实战?太菜了吧》(1)加载Python神器!亮剑!

《看聊天记录都学不会C#?太菜了吧》(1)从今天开始我是一个游戏开发者

你去约个会,你零基础的同学就学完C语言知识点过完了

【小白进】大佬们学习为什么简单?小白该如何学习?学历不高如何找工作?副业很好赚?了解后少走弯路


作者简介

作者名:1_bit

简介:CSDN博客专家,2020年博客之星TOP5,蓝桥签约作者。15-16年曾在网上直播,带领一批程序小白走上程序员之路。欢迎各位小白加我咨询我相关信息,迷茫的你会找到答案。

博客地址:https://i1bit.blog.csdn.net


🐰小C:小媛,这节课我们开始上数组排序的内容吧。

👸小媛:问题不大,不就是习题嘛,反正你写出来的文章,写得不好肯定被骂的,写得好我就会了。😎

🐰小C:唔,好像很有道理,那开始吧。

👸小媛:好的。

🐰小C:我现在有一个数组,数组里面有打乱顺序的数值,你能把这些数字按照从小到大的排列重写存放到数组之中吗?

int a[] = {11,1, 6, 3, 66, 58, 79, 33};

👸小媛:你还是慢慢来吧,别直接进入主题,我接受不了,太难了。😭

🐰小C:哈哈哈,今天我们学的排序是一个叫做冒泡排序的方法。

👸小媛:为啥叫这个名字?感觉挺有趣的,名字听起来不难,可是总感觉学起来就超级难了。

🐰小C:哈哈哈,其实不难,我一步步跟你道来。

👸小媛:问题不大,讲吧。

🐰小C:我们可以看我们需要排序的值 11,1, 6, 3, 66, 58, 79, 33,我们需要小的数在左边,大的数在右边,这样就可以实现从小到大排序了。

👸小媛:是这么一回事,所以怎么做呢?

🐰小C:我们可以使用冒泡排序实现,冒泡排序是一种基础的排序方法,主要是依照相邻的值之间进行对比,把大的放右边,小的放左边,这样就大的值就在右边冒出来了,这就是冒泡排序。

👸小媛:我觉得你白跟我解释了,我还是不懂。 😨

🐰小C:哈哈哈,别急,我给你说说怎么样进行排序。我们需要排列数组的值是 11,1, 6, 3, 66, 58, 79, 33;例如我们首先拿第一个值开始进行相邻元素的比对,也就是 11 与 1 进行对比,此时 11 比 1大,由于我们排序是从小到大进行,所以 1 和 11 交换位置,此时整个数组就变成了 1,11,6, 3, 66, 58, 79, 33。这一步懂吧?

👸小媛:你真当我傻呀。 😱

🐰小C:哈哈哈,那我们继续。我们接着使用 11 与 6 进行对比,此时我们发现 11 大于 6,所以 11 与 6 就交换位置,此时整个数组的排列为 1,6,11, 3, 66, 58, 79, 33。这一步懂吧?

👸小媛:请继续,我不会我会跟你说的。

🐰小C:那接着,我们使用 11 与 3 进行对比,11 比 3 大则继续交换位置;此时数组排列为 1,6,3, 11, 66, 58, 79, 33;我们继续使用 11 与 66 对比,结果发现 66 比 11 大,此时就不需要更换位置了,我们接着使用 66 与 58 进行对比。

👸小媛:停,为什么不是使用 11 与 66 进行对比,而是使用 58? 😢

🐰小C:你还记得我说冒泡排序是用什么元素进行对比的吗?

👸小媛:不记得了。

🐰小C:使用相邻的元素,此时 11 跟 66 比对过了,所以接着往下相邻的位置进行对比 应该是 66 与 58。

👸小媛:哈哈哈,我还以为一直是 11 呢,你继续讲,我明白了。

🐰小C:之后我们使用 66 与 58 进行对比发现,66 大于 58 则交换位置,此时排列变成了 1,6,3, 11, 58, 66, 79, 33;继续使用 66 与 79 进行对比,由于 79 大于 66 所以就不需要更换位置了;最后使用 79 与 33 进行对比,79 大于 33,两者交换位置,此时整个数组中最大的值就出现在右边了,简单吧?

👸小媛:哈哈哈,不简单,我有一种更简单的理解方式。

🐰小C:哈哈哈,你说。

👸小媛:其实这个数列我们可以理解成一个擂台赛,两个人两个人 PK,选出最强的继续打,这样最厉害的不就出来了?

🐰小C:唉哟,你这个理解,绝!

👸小媛:哈哈哈,是不是很厉害。

🐰小C:嗯,那你会写了吗?

👸小媛:…

🐰小C:那我继续教你怎么写。其实冒泡排序跟你说的一样,角逐出了第一名后还有其它名词,我们再进行几轮冒泡就可以从从小到大完成排序了。在这里可以使用循环嵌套来实现这个排序。

👸小媛:唔,循环真有用。

🐰小C:首先我们新建一个循环,毕竟每个元素都需要得到。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int len = sizeof(a) / sizeof(a[0]);int j;for (j=0; j<len; ++j){}
}

👸小媛:sizeof 是啥意思?

🐰小C:其实在之前我们编写代码时,在循环数组值时需要直接写名循环多少次,其实太麻烦了。我们有一个函数叫做 sizeof (a) 可以获取这个数组的有多长。

👸小媛:多长是什么意思?

🐰小C:其实我们的数据类型不同,我们的数据所占据的内存大小也不一样;你可以理解成有些人高大,有些人矮小,他们坐板凳所需要的大小也不一样。

👸小媛:懂了,你意思就是说多长就是他们总共占了多少个板凳,然后 sizeof(a[0]) 就表示每个数据有多长?他们之间相除就得到了多少个数据? 😂

🐰小C:是的,sizeof (a) 可以知道这个数组多长,只需要传入数组变量名到 sizeof 函数中就可以了,而 sizeof(a[0]) 中的 a[0] 是第一个元素,我们这样就知道了一个有多长,就可以得到有多少个值了。

👸小媛:原来如此,懂了。

🐰小C:接下来就直接循环时小于 len 这个变量就好了。

👸小媛:那之后怎么做呢?这一步理解了。

🐰小C:我们在 for 循环中加入这个代码。

for (j=0; j<n; ++j){if (a[j] > a[j+1]){}
}

👸小媛:这又是啥意思?

🐰小C:你想一下 a[j] 是不是取到一个元素?然后 a[j+1] 是不是取到 a[j] 的下一个元素?

👸小媛:你意思是如果此时 j 是0,那么就取到 a[0] 和 a[1]? 😂

🐰小C:是的,使用 if 就判断 a[j] 是否大于它的下一位,如果大于接下来你说要做啥?

👸小媛:交换位置!

🐰小C:是的,你看下面代码?

for (j=0; j<n; ++j){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}
}

👸小媛:咦?你是将 a[j] 当前值赋值给了一个变量 buf,然后又把 a[j] 的下一个元素赋值给了当前的 a[j],接着把 buf 也就是 a[j] 的值复制给了下一个元素,就这样实现了交换? 😰

🐰小C:是的。

👸小媛:我懂了,你使用 buf 先存储 a[j] 的变量是因为如果直接将下一个值给 a[j] 此时就找不到 a[j] 的值了。

🐰小C:对的,你理解了就好,此时我们输出看一下,这一部分的完整代码如下。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int n = sizeof(a) / sizeof(a[0]);int j,buf;for (j=0; j<n; ++j){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}for(j=0; j<n; j++){printf("%d ",a[j]);}
}

👸小媛:你最后的那个循环就是现实排序后的结果吧,问题不大,结果出来了,最大的放最右边了。

🐰小C:哈哈哈,那么最后一步就是就是进行多几轮对比大小了。你说要进行几轮?

👸小媛:多少个人比就是多少轮咯。 😰

🐰小C:那就在外面再加一个循环就好了,让条件小于数组长度,这样就可以让每个人都有比试过了。代码如下。

for (i=0; i<n; i++){for (j=0; j<n; j++){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}
}

👸小媛:可是这样我发现一个问题,这样不就最开始选出来的最大的值也要进行对比了?可是它肯定最大了呀?都选出来了。 😥

🐰小C:哈哈哈,所以我们还要改动一下。我们执行内循环1次是不是就会选出当前最强的一个?

👸小媛:是的。

🐰小C:在第二次循环的时候,由于第一次已经选出了最强的,是不是就会出现第二强的?他与最强的不用交换位置?

👸小媛:嗯。

🐰小C:那你想想,那我在第二次循环的时候就少执行一次不就好了,第二次的时候就少执行两次不就好了?

👸小媛:那我该怎么做?

🐰小C:外循环第一次循环的时候 i 是不是 0?第二次是不是 1?那我们是不是可以在内部循环的条件 for (j=0; j<n; j++) 改成 for (j=0; j<n-i; j++) 不就好了?

👸小媛:唔,很有道理。我写出出来了,是不是下面这样。

# include <stdio.h>
int main(void)
{int a[] = {11,1, 6, 3, 66, 58, 79, 33};int n = sizeof(a) / sizeof(a[0]);int j,buf,i;for (i=0; i<n; i++){for (j=0; j<n-i; j++){if (a[j] > a[j+1]){buf = a[j];a[j] = a[j+1];a[j+1] = buf;}}}for(j=0; j<n; j++){printf("%d ",a[j]);}
}

🐰小C:可以的,我们等下继续。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS 10.7如何获取矢量多边形所有折点的坐标(平面坐标和经纬度坐标)?

Descriptions:As shown in the figure below is a surface pattern spot, how to obtain the coordinates of each vertex (plane coordinates and latitude and longitude coordinates)? The results we want are as follows: Via data source,we get the information that…

Mahout分类算法学习之实现Naive Bayes分类示例

1.简介 (1) 贝叶斯分类器的分类原理发源于古典概率理论&#xff0c;是通过某对象的先验概率&#xff0c;利用贝叶斯公式计算出其后验概率&#xff0c;即该对象属于某一类的概率&#xff0c;选择具有最大后验概率的类作为该对象所属的类。朴素贝叶斯分类器(Naive Bayes Classifi…

一维条形码***技术(Badbarcode)

【转】http://future-sec.com/badbarcode.html 前言在日常生活中&#xff0c;条形码随处可见&#xff0c;特别在超市&#xff0c;便利店&#xff0c;物流业&#xff0c;但你们扫的条形码真的安全吗&#xff1f;之前TK教主在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷&…

ArcGIS 10.7 模型构建器Model Builder空间建模流程化作业案例----影像拼接与掩膜裁剪

Model Builder(模型构建器)是一个用来创建、编辑和管理空间分析模型的应用程序,是一种可视化的编程环境,通过对现有工具的组合完成新模型或软件的制作,为设计和实现空间处理模型(包括工具、脚本和数据)提供了一个图形化的模型框架。 本文以影像数据的拼接和掩膜裁剪为例…

Hello Playwright:(4)自动化测试

利用 Playwright 提供的 API&#xff0c;我们在浏览器上做的很多事情都可以自动化。例如&#xff0c;搜索数据、填写表单和下载文件等等。但最适合的工作&#xff0c;就是自动化测试 Web 应用程序。自动化测试测试是软件开发中的一项基本任务&#xff0c;至少&#xff0c;你需要…

ArcGIS 10.7拆分多部件要素(Multipart Features)至单部件要素的两种方法

GIS中经常会出现多部件要素的现象,为了便于检查拓扑等关系,需要将其拆分为单个的部件。例如,在用同一个图层的多个图斑去裁剪(Clip)时,或者将多个不相邻的图斑进行合并(merge)时,可能会产生多部件要素,本文演示ArcGIS10.7版本中常见的两种拆分多部件要素至单部件要素…

spring-session + redis 实现集群 session 共享

2019独角兽企业重金招聘Python工程师标准>>> 目前市面上实现session共享的方案有很多&#xff0c;其中比较常用的是使用Tomcat、Jetty等web服务器提供的session共享功能&#xff0c;以此将session内容统一存放在数据库&#xff08;如mysql&#xff09;或者缓存&…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(10)无底洞的循环

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

业务流水号规则生成组件

对于很多业务系统都需要生成业务流水号&#xff0c;如果订单号、购采单号等等&#xff1b;而这些业务流水号并不是简单的一个增长数值&#xff0c;它们很多时候都有一些不同的规则来定义&#xff0c;如不同类型的字母或地区拼音简写等。为了更灵活生成这些有规则的业务流水号Be…

ArcGIS中国工具(ArcGISCTools)3.2 安装教程(附安装包下载)

ArcGIS中国工具,简称CTools,集成在ArcGIS 10.x系列版本中。本文在ArcGIS10.7的基础之上,演示3.2版本安装过程,并提供下载地址共大家学习和交流。 一、安装过程

阿里云ECS,搭建MySQL5.7数据库环境

为什么80%的码农都做不了架构师&#xff1f;>>> 配置mysql yum源 [rootiZbp1j6oiamq7t2otpryarZ ~]# cd /data/ [rootiZbp1j6oiamq7t2otpryarZ data]# ll total 0###################################下载mysql源安装包# [rootiZbp1j6oiamq7t2otpryarZ data]# wge…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(9)集万家之长不死 python

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

【重磅】ArcGIS 10.8手把手经典图文安装教程(附安装包全套装下载,亲测可用)

ArcMap时代的最后一版软件,未来官方对ArcMap的支持将仅限于提供补丁,更新和新环境支持,换句话说ArcMap10.8.X将会是最终版本,以后不会再有ArcMap10.9了,官方建议所有人在完成工作流程后立即迁移到ArcGIS Pro。 时间真快,ArcGIS 10.7刚装完没几天,作为GISer的我,有的开始…

聊聊 C# 中的 Visitor 模式

前言 Visitor模式在日常工作中出场比较少&#xff0c;如果统计大家不熟悉的模式&#xff0c;那么它榜上有名的可能性非常大。使用频率少&#xff0c;再加上很多文章提到Visitor模式都着重于它克服语言单分派的特点上面&#xff0c;而对何时应该使用这个模式及这个模式是怎么一…

AcWing 889. 满足条件的01序列(卡特兰数应用)

满足条件的01序列 假设长度为n个序列要求满足题意1的前缀0的个数不能超过1的个数 将问题抽象为从(0, 0)到(n, n) 向上走一个代表这一步对应序列中的值是1&#xff0c;向右走代表序列中的值是0 要想满足1的前缀0的数量大于1的数量就需要满足所有路过的途径在y x这个函数个下面…

添加ASP.NET网站资源文件夹

ASP.NET应用程序包含7个默认文件夹&#xff0c;分别为Bin、APP_Code、App_GlobalResources、App_LocalResources、App_WebReferences、App_Browsers和“主题”文件夹。每个文件夹都存放ASP.NET应用程序的不同类型的资源。 方法 说明Bin  包含程序所需的所有已编译程序集&#…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(8)我们开始做一个数字小游戏吧

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

Microsoft SQL Server 2019开发版安装配置教程

一、安装cn_sql_server_2019_developer_x64 双击setup.exe进行安转。 点击【安装】。 点击【全新SQL Server独立按住啊或向现有安装添加功能】。 点击【下一步】。

《看聊天记录都学不会C#?太菜了吧》(4)C# 中的尚方宝剑 “先斩后奏”

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

如何用 Swift 语言构建一个自定控件

本文译自&#xff1a;How To Make a Custom Control in Swift 用户界面控件是所有应用程序重要的组成部分之一。它们以图形组件的方式呈现给用户&#xff0c;用户可以通过它们与应用程序进行交互。苹果提供了一套控件&#xff0c;例如 UITextField&#xff0c;UIButton&#xf…