JavaScript插入排序算法原理与实现方法示例


Posted in Javascript onAugust 06, 2018

本文实例讲述了JavaScript插入排序算法原理与实现方法。分享给大家供大家参考,具体如下:

一、插入排序简介:

想象我们斗地主,摸排阶段,手里的牌都按照从小到大排序。如果每摸一张牌,我们就把他插入合适的位置,使得它比后面位置的牌小,比前面位置的牌大或者相等。

类似这样的一种排序方法就是插入排序:

在一个数组a中,我们要实现升序排序,假设我们前面已经对a[0]a[k]排好序,现在需要将a[k+1]的值放入合适的位置。

(为简便,此处不讨论k的取值范围,只是用它代表数组的某个位置)

1、首先,我们将a[k+1]的值与a[k]比较,如果小于a[k]就交换两者的值,相等或者大于都不需要交换。假设交换了,那么现在a[k]存放的是原先a[k+1]的值,新的a[k]的值有可能比前面位置的值小,故又需要再次对a[k]a[k-1]进行比较,以此类推。直到发现某个位置a[p](p是0到k之间数)的值已经不比a[p-1]的值小,比较结束,a[k+1]的值已经放入合适的位置a[p]。或者a[k+1]的值比前面的值都小,一步步交换之后a[0]存放了原先a[k+1]的值,那么也结束。现在a[0]a[k+1]是一个有序数组。

2、对a[k+1]之后a[k+2]a[a.length-1]的每一个元素都依次进行相同操作,最终得到一个有序数组。

二、JavaScript实现插入排序

function insertion_sort(arr) {
  var temp;
  for (var i = 1; i < arr.length; i++) {
    for (var j = i-1; j >=0; j--) {
      if (arr[j+1]<arr[j]) {
        temp=arr[j+1];
        arr[j+1]=arr[j];
        arr[j]=temp;
      }else if (arr[j+1]>=arr[j]) {
        break;
      }
    }
  }
  return arr;
}
var a=[11,2,3,445,7,32,71,8,94];
console.log(insertion_sort(a));
var b=[94,11];
console.log(insertion_sort(b));

说明:

1、一旦发现arr[j+1]的值不比前面的值小,就可以结束内层循环了,break实现这一功能;

2、内层循环用arr[j+1]的原因:初始时a[j](即a[i-1])代表a[i]前一个位置,进入循环后,a[j+1]就表示了a[i]的位置,实现了a[i]a[i-1]的第一次比较;随着j第一次自减,实际上比较了a[i-1]a[i-2];依次类推。如果将arr[j+1]改成a[i]是不行的,因为没有实现位置的移动。

上述代码使用在线HTML/CSS/JavaScript代码运行工具http://tools.3water.com/code/HtmlJsRun测试运行结果如下:

JavaScript插入排序算法原理与实现方法示例

Javascript 相关文章推荐
JavaScript中的Window窗口对象
Jan 16 Javascript
JS+CSS实现表格高亮的方法
Aug 05 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
js实现对ajax请求面向对象的封装
Jan 08 Javascript
原生JavaScript实现滚动条效果
Mar 24 Javascript
JavaScript中的操作符类型转换示例总结
May 30 Javascript
tab栏切换原理
Mar 22 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
Apr 27 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
Jan 02 Javascript
jQuery封装animate.css的实例
Jan 04 jQuery
微信小程序动态添加view组件的实例代码
May 23 Javascript
layui前端时间戳转化实例
Nov 15 Javascript
微信小程序之多列表的显示和隐藏功能【附源码】
Aug 06 #Javascript
ES6 系列之 WeakMap的使用示例
Aug 06 #Javascript
JavaScript选择排序算法原理与实现方法示例
Aug 06 #Javascript
ES6 中可以提升幸福度的小功能
Aug 06 #Javascript
原生JS实现的轮播图功能详解
Aug 06 #Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
Aug 06 #Javascript
animate.css在vue项目中的使用教程
Aug 05 #Javascript
You might like
sphinx增量索引的一个问题
2011/06/14 PHP
php随机输出名人名言的代码
2012/10/07 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
用PHP生成excel文件到指定目录
2015/06/22 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
js 上传文件预览的简单实例
2016/08/16 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
[00:55]2015国际邀请赛中国区预选赛5月23日——28日约战上海
2015/05/25 DOTA
[50:15]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
Python中optparse模块使用浅析
2015/01/01 Python
Python编程中的文件读写及相关的文件对象方法讲解
2016/01/19 Python
Python实现的桶排序算法示例
2017/11/29 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
详解Python设计模式之策略模式
2020/06/15 Python
Python3爬虫关于识别点触点选验证码的实例讲解
2020/07/30 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
JAVA和C++的区别
2013/10/06 面试题
数学专业推荐信范文
2013/11/21 职场文书
本科毕业生专业自荐书范文
2014/02/05 职场文书
个人对照检查材料
2014/02/12 职场文书
年终总结会主持词
2014/03/25 职场文书
党员活动日总结
2014/05/05 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
安全隐患整改报告
2014/11/06 职场文书
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python