通过实例解析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 相关文章推荐
走出JavaScript初学困境—js初学
Dec 29 Javascript
删除节点的jquery代码
Jan 13 Javascript
利用JavaScript的AngularJS库制作电子名片的方法
Jun 18 Javascript
JavaScript数组各种常见用法实例分析
Aug 04 Javascript
基于node.js依赖express解析post请求四种数据格式
Feb 13 Javascript
vue2.0 自定义日期时间过滤器
Jun 07 Javascript
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
JavaScript数据结构之优先队列与循环队列实例详解
Oct 27 Javascript
CentOS环境中MySQL修改root密码方法
Jan 07 Javascript
web3.js增加eth.getRawTransactionByHash(txhash)方法步骤
Mar 15 Javascript
vue两组件间值传递 $router.push实现方法
May 15 Javascript
使用React-Router实现前端路由鉴权的示例代码
Jul 26 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 smarty 二级分类代码和模版循环例子
2011/06/01 PHP
一款简单实用的php操作mysql数据库类
2014/12/08 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
javascript中parentNode,childNodes,children的应用详解
2013/12/17 Javascript
js点击事件链接的问题解决
2014/04/25 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
AngularJS基础 ng-value 指令简单示例
2016/08/03 Javascript
强大的 Angular 表单验证功能详细介绍
2017/05/23 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
vue 登录滑动验证实现代码
2018/08/24 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
python数据结构之二叉树的建立实例
2014/04/29 Python
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
python使用psutil模块获取系统状态
2016/08/27 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
HTML5 Canvas 起步(1) - 基本概念
2009/05/12 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
医院义诊活动总结
2014/07/04 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
结婚幸福感言
2015/08/01 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书
Vue+Element UI实现概要小弹窗的全过程
2021/05/30 Vue.js
SQL Server删除表中的重复数据
2022/05/25 SQL Server
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL