JavaScript实现九种排序算法

1.插入排序

最普通的排序算法, 从数组下标1开始每增1项排序一次,越往后遍历次数越多;

原理图:
在这里插入图片描述代码:
在这里插入图片描述
2.二分插入排序

插入排序的一种优化实现, 通过二分法减少遍历时间。

原理图:

在这里插入图片描述
在这里插入图片描述
3.希尔排序

其排序思路有点复杂, 需花多点时间理解;排序思路:先将整个待排序记录序列分割成若干个子序列,在序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。

原理图:
在这里插入图片描述
代码:
在这里插入图片描述
4.冒泡排序

很常见很容易理解的排序算法, 排序思路:遍历数组,每次遍历就将最大(或最小)值推至最前。越往后遍历查询次数越少, 跟插入排序刚好相反。

原理图:
在这里插入图片描述
代码:
在这里插入图片描述
5.改进冒泡排序

对上述冒泡排序的一种优化, 优化思路:当一次遍历前后数组不产生变化时,说明该数组已经有序,结束排序。

原理图:
在这里插入图片描述
代码:
在这里插入图片描述
6.快速排序

快速排序在诸多算法排序中可能不是最好的, 但个人认为在JS语言实现中是最快的!以前公司项目中对比过二分插入排序、优化冒泡排序、快速排序的JS实现执行时间,几千条数据的数组在firefox下快速排序的速度比冒泡、插入排序快3至4秒(数组元素为复杂的对象,根据对象某一属性值排序)。阮一峰老师研究JS实现排序时曾只针对该种排序进行讲解:javascript的快速排序实现**。

原理图:
在这里插入图片描述
代码:
在这里插入图片描述
7.选择排序

实现思路跟冒泡排序差不多, 可以说是冒泡排序的衍生版本;

原理图:
在这里插入图片描述
代码:
在这里插入图片描述
8.堆排序

因为js模拟二叉树比较麻烦,所以堆排序的优势用js语言无法体现, 相对而言C语言的链表在实现上更能表现堆排序,堆排序或许更适合指针类的计算机语言。本文注重图解各排序的基本思路,所以该排序的具体实现没讲太细, 如想深究实现细节请看:堆排序及其分析**。

原理图:

1.调整二叉树,形成大根堆(子节点都比父节点小)。
在这里插入图片描述
2.交换堆第一元素跟最后元素位置,最后元素弹出堆。然后继续回到1,调整堆。
在这里插入图片描述
3.重复2, 当所有节点弹出堆后;弹出的节点值就是有序的了。
在这里插入图片描述
代码:
在这里插入图片描述
在这里插入图片描述
9.归并排序

很容易理解且执行效率一般(js实现)的排序, 排序思路:将无序的数组 拆成N部分进行有序处理,然后合并;

原理图:
在这里插入图片描述
代码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值