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