大家好,我是IT修真院北京分院第20期的学员王野,一枚正直纯洁善良的程序员
今天给大家分享一下,修真院官网JS任务4,深度思考中的知识点——JS常见的排序算法
一、背景介绍
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
二、知识剖析
算法的特点
1.有限性(Finiteness):一个算法必须保证执行有限步之后结束。
2.确切性(Definiteness): 一个算法的每一步骤必须有确切的定义。
3.输入(Input):一个算法有零个或多个输入,以刻画运算对象的初始情况,所谓零个输入是指算法本身给定了初始条件。
4.输出(Output):一个算法有一个或多个输出。没有输出的算法毫无意义。
5.可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。
三、常见问题
几种常见算法的写法及实现
四、解决方案 编码实战
冒泡排序(Bubble Sort)
思想:每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置
实现:需要用到两层for循环,外层从第一个数到倒数第二个数,内层从外层的后面一个数到最后一个数
特点:排序算法的基础。简单实用易于理解,缺点是比较次数多,效率较低。
冒泡排序快速排序(Quick Sort)
思想:先找到一个基准点(一般指数组的中部),然后数组被该基准点分为两部分,依次与该基准点数据比较,如果比它小,放左边;反之,放右边。
左右分别用一个空数组去存储比较后的数据。最后递归执行上述操作,直到数组长度<=1;
特点:快速,常用。缺点是需要另外声明两个数组,浪费了内存空间资源。
插入排序(Insertion Sort)
(1) 从第一个元素开始,该元素可以认为已经被排序
(2) 取出下一个元素,在已经排序的元素序列中从后向前扫描
(3) 如果该元素(已排序)大于新元素,将该元素移到下一位置
(4) 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
(5)将新元素插入到下一位置中
(6) 重复步骤2
插入排序五、扩展思考
这几种排序算法的优缺点
n: 数据规模
k:“桶”的个数
In-place: 占用常数内存,不占用额外内存
Out-place: 占用额外内存
稳定性:排序后2个相等键值的顺序和排序之前它们的顺序相同
JS常见的排序算法及实现
六、参考文献
七、更多讨论
------------------------------------------------------------------------------------------------------------------------
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧 !
网友评论