停课不停学
有趣的算法——冒泡排序
01
生活中处处都有算法
每个人每天都会用到一些算法,算法也是人类使用计算机解决问题的技巧之一,但是算法并不是仅仅用于计算机领域中,包括在数学、物理甚至是每天的生活中,都有广泛的应用,在日常生活中就有许多工作可以使用算法来描述,例如员工的工作报告,宠物的饲养过程,厨师准备美食的食谱,学生的课程表等,如今我们几乎每天都要使用各种各样的搜索引擎必须要借助不断更新的算法来进行。
常用的算法一般可以用中文、英文、数字等文字来描述,即用语言来描述算法的具体步骤,例如,在小品《钟点工》中有这样一个问题:要把大象装进冰箱,总共分几步?最后的答案是三步,第一步,把冰箱门打开;第二步,把大象装进去;第三步,把冰箱门关上。
上面的举例听上去像是一个笑话,但是也算是一个简单的使用语言来描述的算法。
生活中还有很多类似的简单算法,菜谱是做菜肴的算法,产品的说明书是操作产品的算法,今天我们主要介绍在计算机编程中用的算法。
02
认识算法
算法是指解题方案准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。可以简单理解为“在有限步骤内解决数学问题的程序。”如果运用在计算机领域中,我们也可以把算法定义为:“为了解决某项工作或是某个问题,所需要有限数量的机械性或是重复性指令与计算的步骤。
在我们日常生活中我们做的任何事情都是在一定条件下按照某种顺序执行的一系列操作。解决数学问题也是如此,比如使用加减消元法解决二元一次方程组时,就可以按照某一步骤进行操作,
算法特点:
1. 有穷性:一个算法应包括有限的操作步骤,能在执行有穷的操作步骤之后结束。
2. 确定性:算法的计算规则及相应的计算步骤必须是确定的。
3. 可行性:算法中的每一个步骤都是在有限的时间内完成的,并能得到确定的结果。
03
排序算法
排序是将一个数据元素的任意序列,重新排列成某一个按照关键字有序的序列,在我们生活中经常会出现排序的情况,比如从低到高排队,以及一些成绩的排名,当然大部分情况我们是将很多组数据进行升序或是降序排序,数据较多时我们可能会使用电脑帮助我们一键排序,但有非常庞大的数据时电脑是如何排序的,接下来就跟着老师一起认识一下排序算法——冒泡排序。
冒泡排序:
冒泡排序是最简单的排序方法,理解起来容易。虽然它的计算步骤比较多,不是最快的,但它是最基本的。
冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
举例排序数字5、4、2、7、3
第一次遍历过程:
5、4、2、7、3——比较5和4的大小(5>4)4、5、2、7、3
4、5、2、7、3——比较5和2的大小(5>2)4、2、5、7、3
4、2、5、7、3——比较5和7的大小(5<7)4、2、5、7、3
4、2、5、7、3——比较7和3的大小(7>3)4、2、5、3、7
第二次遍历过程:
4、2、5、3、7——比较4和2的大小(4>2)2、4、5、3、7
2、4、5、3、7——比较4和5的大小(4<5)2、4、5、3、7
2、4、5、3、7——比较5和3的大小(5>3)2、4、3、5、7
第三次遍历过程:
2、4、3、5、7——比较2和4的大小(2<4)2、4、3、5、7
2、4、3、5、7——比较4和3的大小(4>3)、2、3、4、5、7
第四次遍历过程:
2、3、4、5、7——比较2和3的大小(2<3)2、3、4、5、7
排序结束结果为2、3、4、5、7
排
序
算
法
图
例
排
序
演
示
细心的小朋友学习完冒泡排序就会发现,冒泡排序虽然简单但是也会有很多缺陷,比如运行速度比较慢,冒泡有一个最大的问题就是这种算法不管你有序还是没序,算法都会将你给定的数据循环比较了。
比如我举个数组例子:[ 5,7,11,13,19 ],一个有序的数组,根本不需要排序,它仍然是双层循环一个不少的把数据遍历干净,这其实就是做了没必要做的事情,属于浪费资源。
聪明的小朋友认真思考下有没有其他的策略机制可以避免冒泡排序算法出现上面的问题。
图文:张世钰 部分来自网络
编辑:葛钰
审核:董庆明 黄小雷 徐红