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 相关文章推荐
可以文本显示的公告栏的js代码
Mar 11 Javascript
基于JQuery实现相同内容合并单元格的代码
Jan 12 Javascript
JS模板实现方法
Apr 03 Javascript
用C/C++来实现 Node.js 的模块(一)
Sep 24 Javascript
JSONP之我见
Mar 24 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
Dec 20 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
VUE脚手架具体使用方法
May 20 Javascript
vue 项目@change多个参数传值多个事件的操作
Jan 29 Vue.js
React服务端渲染原理解析与实践
Mar 04 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
PHP 高级课程笔记 面向对象
2009/06/21 PHP
如何用phpmyadmin设置mysql数据库用户的权限
2012/01/09 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
php+ajax制作无刷新留言板
2015/10/27 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
Javascript显示和隐藏ul列表的方法
2015/07/15 Javascript
JavaScript模拟push
2016/03/06 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
2016/10/17 Javascript
JS定时检测任务任务完成后执行下一步的解决办法
2016/12/22 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
Node.js实现用户评论社区功能(体验前后端开发的乐趣)
2019/05/09 Javascript
Javascript实现秒表计时游戏
2020/05/27 Javascript
Vue生命周期activated之返回上一页不重新请求数据操作
2020/07/26 Javascript
wtfPython—Python中一组有趣微妙的代码【收藏】
2018/08/31 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
python找出一个列表中相同元素的多个索引实例
2019/06/11 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
PyTorch-GPU加速实例
2020/06/23 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
python 如何快速复制序列
2020/09/07 Python
详解Python调用系统命令的六种方法
2021/01/28 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
反对四风问题自我剖析材料
2014/09/29 职场文书
教师党员学习群众路线心得体会
2014/11/04 职场文书
天鹅湖观后感
2015/06/09 职场文书
行政复议决定书
2015/06/24 职场文书
鲁滨孙漂流记读书笔记
2015/06/30 职场文书
教师节晚会主持词
2015/06/30 职场文书
2016国庆节活动宣传语
2015/11/25 职场文书
原来闭幕词是这样写的呀!
2019/07/01 职场文书
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js