C语言——冒泡排序法
冒泡
简介
从最简单开始,首先我们创建一个数组,该数组有5位数字:
下面我们根据算法的描述来进行代码验算(第一趟排序):
排序~
如果前一位的数比后一位的数要大,那么就交换,直到将数组的所有元素都比较了一遍!
经过我们第一趟比较,我们可以发现:最大的值就在数组的末尾啦!
第二趟~
第二趟排序的代码如下:
结果:我们的第二大数已经排在了倒数第二位了!
第三步~
值得说明的是:上面的结果看起来已经是排序好的了,其实是我在测试时数据还不足够乱,如果数据足够乱的话,是需要4(n-1)趟排序的!
但我们从上面的代码就可以发现:第一趟和第二趟的比较、交换代码都是重复的,并且我们的比较都是写死的(0,1,2,3,4),并不通用!
我们的数组有5位数字
第一趟需要比较4次
第二趟需要比较3次
我们可以根据上面规律推断出:
第三趟需要比较2次
第四趟需要比较1次
再从上面的规律可以总结出:5位数的数组需要4躺排序的,每躺排序之后次数减1(因为前一趟已经把前一趟数的最大值确定下来了)!
于是我们可以根据for循环和变量将上面的代码进行简化:
在优化~
从上面的例子我们可以看出来,如果数据足够乱的情况下是需要经过4趟比较才能将数组完整排好序。但是我们在第二趟比较后就已经得到排好序的数组了。 但是,我们的程序在第二趟排序后仍会执行第三趟、第四趟排序。这是没有必要的,因此我们可以对其进行优化一下:
如果在某趟排序中没有发生交换位置,那么我们可以认为该数组已经排好序了。
这也不难理解,因为我们每趟排序的目的就是将当前趟最大的数置换到对应的位置上,没有发生置换说明就已经排好序了。
代码如下:
推荐两个视频学习网站
慕课网
第一个推荐的学习网站应该是慕课网,在我初学的时候,这个网站对我的帮助挺大的,里面有很多免费的课程,也有很多付费的课程。如果你没有特殊的需求,一般免费课程就够自己学的了。
哔哩哔哩
想不到弹幕追番/原创视频小站也被推荐了吧!不得不说哔哩哔哩上面的学习资源还是很多的,现在有很多年轻人都在上面学习呢!哈哈哈 大部分年轻人最爱的小破站可是受到过央视表扬的。被誉为年轻人学习的首要阵地,哔哩哔哩干杯!
知道要学什么之后,如何去学呢?
每个知识点可以考虑这样去入手:
官网(大概率是英文,不推荐初学者看)。
书籍(知识更加系统完全,推荐)。
视频(比较容易理解,推荐,特别是初学的时候。慕课网和哔哩哔哩上面有挺多学习视频可以看,只直接在上面搜索关键词就可以了)。
网上博客(解决某一知识点的问题的时候可以看看)。
这里给大家一个建议,看视频的过程中最好跟着一起练,要做笔记!!!
最好可以边看视频边找一本书籍看,看视频没弄懂的知识点一定要尽快解决,如何解决?
首先百度/Google,通过搜索引擎解决不了的话就找身边的朋友或者认识的一些人。另外,一定要进行项目实战!很多人这时候就会问没有实际项目让我做怎么办?我觉得可以通过下面这几种方式:
在网上找一个符合自己能力与找工作需求的实战项目视频或者博客跟着老师一起做。做的过程中,你要有自己的思考,不要浅尝辄止,对于很多知识点,别人的讲解可能只是满足项目就够了,你自己想多点知识的话,对于重要的知识点就要自己学会去往深处学。
Github或者码云上面有很多实战类别项目,你可以选择一个来研究,为了让自己对这个项目更加理解,在理解原有代码的基础上,你可以对原有项目进行改进或者增加功能。
自己动手去做一个自己想完成的东西,遇到不会的东西就临时去学,现学现卖(这种方式比较难,初学不推荐用这种方式,因为你脑海中没有基本的概念,写出来的代码一般会很难或者根本就做不出来一个像样的东西)。
划重点——做项目不光要做,还要改进,改善。另外,如果你的老师有相关 Java 后台项目的话,你也可以主动申请参与进来。
一定要学会分配自己时间,要学的东西很多,真的很多,搞清楚哪些东西是重点,哪些东西仅仅了解就够了。一定不要把精力都花在了学各种框架上,算法和数据结构真的很重要!
解决30万
长安国际大学城学生
学习中的各种疑难杂症!关注我,准没错!