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 相关文章推荐
Mootools 1.2教程(3) 数组使用简介
Sep 14 Javascript
JScript分割字符串示例代码
Sep 04 Javascript
JS delegate与live浅析
Dec 21 Javascript
JavaScript中跨域调用Flash的方法
Aug 11 Javascript
JavaScript中函数声明与函数表达式的区别详解
Aug 18 Javascript
JS转换HTML转义符的方法
Aug 24 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
Dec 20 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
Vue-Router的使用方法
Sep 05 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
返回上一个url并刷新界面的js代码
Sep 12 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
jQuery 名称冲突的解决方法
2011/04/08 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
js性能优化 如何更快速加载你的JavaScript页面
2012/03/17 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
jquery-syntax动态语法着色示例代码
2014/05/14 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
AngularJS入门知识之MVW类框架的编程思想探讨
2014/12/08 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
基于javascript实现句子翻牌网页版小游戏
2016/03/23 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
python实现年会抽奖程序
2019/01/22 Python
python3访问字典里的值实例方法
2020/11/18 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
店长助理岗位职责
2013/12/13 职场文书
房地产广告词大全
2014/03/19 职场文书
家长对老师的评语
2014/04/18 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
区域销售主管岗位职责
2014/06/15 职场文书
大学社团招新的通讯稿
2014/09/10 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
创业计划书之牛肉汤快餐店
2019/10/08 职场文书