通过实例解析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 相关文章推荐
基于JQuery的数字改变的动画效果--可用来做计数器
Aug 11 Javascript
精通Javascript系列之数据类型 字符串
Jun 08 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
jQuery替换textarea中换行的方法
Jun 10 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
使用Jenkins部署React项目的方法步骤
Mar 11 Javascript
vue如何截取字符串
May 06 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
微信小程序页面间跳转传参方式总结
Jun 13 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
Dec 16 Javascript
JS实现TITLE悬停长久显示效果完整示例
Feb 11 Javascript
Javascript操作select控件代码实例
Feb 14 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两种去掉数组重复值的方法比较
2014/06/19 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
JavaScript 指导方针
2007/04/05 Javascript
关于火狐(firefox)及ie下event获取的两种方法
2012/12/27 Javascript
JS实现div居中示例
2014/04/17 Javascript
解决Layui 表单提交数据为空的问题
2018/08/15 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
基于JavaScript实现大文件上传后端代码实例
2020/08/18 Javascript
Python 统计字数的思路详解
2018/05/08 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
python修改字典键(key)的方法
2019/08/05 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Python Django搭建网站流程图解
2020/06/13 Python
python退出循环的方法
2020/06/18 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
Python的信号库Blinker用法详解
2020/12/31 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
英国网上购买门:Direct Doors
2018/06/07 全球购物
Java TransactionAPI (JTA) 主要包含几部分
2012/12/07 面试题
linux面试题参考答案(10)
2016/10/26 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
淘宝店铺营销方案
2014/02/13 职场文书
《社戏》教学反思
2014/04/15 职场文书
加入学生会演讲稿
2014/04/24 职场文书
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL