通过实例解析JavaScript常用排序算法


Posted in Javascript onSeptember 02, 2020

冒泡排序

冒泡排序是我们在编程算法中,算是比较常用的排序算法之一,在学习阶段,也是最需要接触理解的算法,所以我们放在第一个来学习。

算法介绍:

比较相邻的两个元素,如果前一个比后一个大,则交换位置。第一轮把最大的元素放到了最后面。由于每次排序最后一个都是最大的,所以之后按照步骤1排序最后一个元素不用比较。

通过实例解析JavaScript常用排序算法

冒泡算法改进:

设置一个标志,如果这一趟发生了交换,则为true。否则为false。如果这一趟没有发生交换,则说明排序已经完成。代码如下:

通过实例解析JavaScript常用排序算法

假如数组长度是20,如果只有前十位是无序排列的,后十位是有序且都大于前十位,所以第一趟遍历排序的时候发生交换的位置必定小于10,且该位置之后的必定有序,我们只需要排序好该位置之前的就可以,因此我们要来标记这个位置就可以了,即可以记录每次扫描中最后一次交换的位置,下次扫描的时候只要扫描到上次的最后交换位置就行了,因为后面的都是已经排好序的,无需再比较,代码如下:

通过实例解析JavaScript常用排序算法

每一次循环从两头出发算出最大和最小值,代码如下:

通过实例解析JavaScript常用排序算法

在代码3的基础上记录每次扫描最后一次交换的位置,下次扫描的时候只要扫描到上次的最后交换位置就行,同代码2,代码如下:

通过实例解析JavaScript常用排序算法

冒泡排序动图演示:

通过实例解析JavaScript常用排序算法

快速排序

算法介绍:

快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。然后递归调用,在两边都实行快速排序。

通过实例解析JavaScript常用排序算法

快速排序动图演示:

通过实例解析JavaScript常用排序算法

选择排序

算法介绍:

选择排序就是从一个未知数据空间里,选取之最放到一个新的空间

通过实例解析JavaScript常用排序算法

选择排序动图演示:

通过实例解析JavaScript常用排序算法

插入排序

算法介绍:

从第一个默认被排好序的元素开始取出下一个元素,在已经排序的元素序列中从后向前扫描如果已排序的元素大于取出的元素,则将其分别向后移动一位直到找到已排序的元素中小于或等于取出的元素,将取出的元素放到它的后一位重复步骤2

通过实例解析JavaScript常用排序算法

插入排序算法改进-二分法插入排序:

通过实例解析JavaScript常用排序算法

插入排序法动图演示:

通过实例解析JavaScript常用排序算法

以上就是4中比较基础的排序方法了,JavaScript的排序算法还有很多,这是我们4种最常见也是最基本的算法,掌握理解好,在面试和开发中也能从容应对了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
Nov 07 Javascript
javascript Array.prototype.slice的使用示例
Nov 14 Javascript
转换字符串为json对象的方法详解
Nov 29 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
在 Express 中使用模板引擎
Dec 10 Javascript
jQuery中的一些常见方法小结(推荐)
Jun 13 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
JavaScript常用代码书写规范的超全面总结
Sep 11 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
Sep 12 Javascript
javascript中call()、apply()的区别
Mar 21 Javascript
详解JavaScript 作用域
Jul 14 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 Javascript
手把手教你实现 Promise的使用方法
Sep 02 #Javascript
如何基于jQuery实现五角星评分
Sep 02 #jQuery
在vscode 中设置 vue模板内容的方法
Sep 02 #Javascript
JavaScript array常用方法代码实例详解
Sep 02 #Javascript
Vue前端判断数据对象是否为空的实例
Sep 02 #Javascript
详解JavaScript 事件流
Sep 02 #Javascript
JavaScript判断数据类型有几种方法及区别介绍
Sep 02 #Javascript
You might like
php empty() 检查一个变量是否为空
2011/11/10 PHP
php站内搜索关键词变亮的实现方法
2014/12/30 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
简单实现php上传文件功能
2017/09/21 PHP
Mootools 1.2教程 Fx.Morph、Fx选项和Fx事件
2009/09/15 Javascript
使用JavaScript switch case 另类写法
2010/03/14 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
制作jquery遮罩层效果导航菜单代码分享
2013/12/25 Javascript
javascript循环链表之约瑟夫环的实现方法
2017/01/16 Javascript
Angularjs上传图片实例详解
2017/08/06 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
python实现机器人行走效果
2018/01/29 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
Python中的TCP socket写法示例
2018/05/11 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
django框架模板语言使用方法详解
2019/07/18 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
中国海淘族值得信赖的海淘返利网站:55海淘
2017/01/16 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
酒店门卫岗位职责
2013/12/29 职场文书
公积金转移接收函
2014/01/11 职场文书
人大调研汇报材料
2014/08/14 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
2016年小学生寒假总结
2015/10/10 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
Java 常见的限流算法详细分析并实现
2022/04/07 Java/Android