无名 发表于 2022-5-8 18:02:22

【编程基础】C语言教程(2)循环(1)冒泡算法


上篇教程#【编程基础】C语言教程(1)#那么就直接开始了我们这篇教程学for循环以及冒泡算法。http://cdn.u1.huluxia.com/g3/M01/B5/C1/wKgBOV5tbAaAejuXAAF0VpbO3b4435.jpg
我们先来理解一下什么是“循环”字面意思:但是,C语言的循环和这个有点点不同,c语言中大概就是:重复执行一段特定的代码。且C语言里面的循环有多种方法来实现,常见的有用for和while函数我们这节课只讲for函数:使用方法:for(单次表达式;条件表达式;表达式){特定代码;}好了,又到了万众瞩目的分析时间 了(此刻应有bgm)首先 单次表达式,意思就是只会执行一次的表达式(何为表达式?百度啊!!!)(其实就是类似方程)条件表达式,就是一种条件,只要这个条件是真(条件成立)就执行特定代码。等特定代码执行完才执行末尾的表达式for (int a = 0; a < 100; a++){printf("%d ", a);}这是一个简单的例子,分析一下首先int a = 0;第一课的知识 申明一个变量a,给他赋值0。a<100;条件表达式,当a<100成立就执行第二行:printf("%d ",a);第一课的知识,输出a和一个空格执行完printf("%d ", a);后,再运行末尾的表达式(a++)何为a++,“++”是自增运算符,使a(++左边的变量)增加1。运算符是个很重要的东西,可以让你的程序可读性增加!这很重要!百度百科上有个很详细的表,各位有兴趣可以去阅读(自己去百度看)让我们来看看结果结果中,第一个数字为0,末尾为99,证实了末尾的表达式是运行了特定代码后才执行的为什么呢?且听我一一道来1.首先,因为int a=0;所以此时a=0; a<100条件成立,于是就输出了a,如果是先执行末尾的表达式,那结果应该是1 而并非0 2.而最后一个数字是99而并非100,因为a=99输出了后,就执行了末尾的表达式(a++),那么使a=100,a=100自然条件表达式不成立,也就不运行特定代码了!上两行信息量略大,请多看几遍,理解ta,不然很容易混乱ps:过来人的经验好了,讲完for循环,可以开始讲冒泡排序了!冒泡排序,就是你给他一串数字,它按照从小到大的顺序排序起来,冒泡排序是很慢的(所以开发中不推荐使用),但是有助于我们理解排序,所以我们这就用冒泡排序冒泡排序理解很简单,就是你存储了这几个数字后,将第一个和第二个对比,若第二个更大就两个换位,然后第二个跟第三个对比...直到最后一个的上一个和最后一个对比,但是一次对比是对比不完的,所以我们需要双重循环来保证结果的正确性(这也是为什么冒泡排序最慢的原因之一)http://cdn.u1.huluxia.com/g3/M01/B5/C1/wKgBOV5tbAeAFp58AABwO72EVEE253.jpg
但是,这有个难题:排序的数字一般有很多,我们总不能打int a,b,c,d,e,f,g....a1,b1,c1.....等等那样定义变量吧,这时候我们就用到一个神奇的东西:数组“数组是用于储存多个相同类型数据的集合。”----百度百科啥意思呢,可以理解为,多个储存相同类型的值的箱子组成起来的柜子,定义数组的方法为:   类型 名字[数量];例如: int a;然后a,a,a,a都可以分别用来储存不同的int类型的值啦注意,你定义的数组,例如int a,你能访问的只有0-99(100个),a是不行的(数组越界,很麻烦的一个东西,百度走起)int a;for (int get = 0; get < 10; get++){scanf("%d", &a);//读取数字}int temp; //定义一个变量来交换 for (int j = 0; j<10; j++) //用一个嵌套循环来遍历一遍每一对相邻元素 (所以冒泡函数慢嘛,时间复杂度高) {for (int i = 0; i<10 -1 - j; i++)//因为每一趟都可以确定一个数,所以可以减少排序次数,由于j是0-9,所以需要加1{if (a>a) //">"改为"<"这样就实现了从大到下排序{temp = a; //基本的交换原理"c=a;a=b;b=c" a = a; //因为如果a=b,那a的原本的值就丢失了,b=a其实就b=b(废话a = temp;//所以要创建一个变量c(在这里是temp)来储存a的值}}}for (int p = 0; p < 10; p++){printf("%d ", a);//输出排序后的数组}冒泡算法的重点是比较相邻的两个数,我来模拟一下最极端的情况      (还有些字数不够没讲完评论区见)http://cdn.u1.huluxia.com/g3/M01/B5/C1/wKgBOV5tbAeAXD49AACDiABEGJ0890.jpg
      
页: [1]
查看完整版本: 【编程基础】C语言教程(2)循环(1)冒泡算法