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 相关文章推荐
JQuery 学习笔记 选择器之五
Jul 23 Javascript
JavaScript通过join函数连接数组里所有元素的方法
Mar 20 Javascript
jQuery Easyui实现左右布局
Jan 26 Javascript
JavaScript常用字符串与数组扩展函数小结
Apr 24 Javascript
AngularJS 模型详细介绍及实例代码
Jul 27 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
Dec 08 Javascript
js编写简单的计时器功能
Jul 15 Javascript
node的process以及child_process模块学习笔记
Mar 06 Javascript
Vuex,iView UI面包屑导航使用扩展详解
Nov 04 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
jdk1.8+vue elementui实现多级菜单功能
Sep 24 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 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 中的输出缓冲
2006/12/21 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
jquery.blockUI.js上传滚动等待效果实现思路及代码
2013/03/18 Javascript
javascript对象的使用和属性操作示例详解
2014/03/02 Javascript
jQuery中extend函数详解
2015/02/13 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
原生js实现电商侧边导航效果
2017/01/19 Javascript
JavaScript 数据类型详解
2017/03/13 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
基于ES6作用域和解构赋值详解
2017/11/03 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
2018/04/26 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
2019/04/26 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
python argparser的具体使用
2019/11/10 Python
Tensorflow分批量读取数据教程
2020/02/07 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
幼儿园教师教育感言
2014/02/28 职场文书
十八届三中全会感言
2014/03/10 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
检察院院长群众路线教育实践活动个人整改措施
2014/10/04 职场文书
医院见习总结
2015/06/24 职场文书
环境卫生标语
2015/08/03 职场文书
高一军训口号
2015/12/25 职场文书
使用 DataAnt 监控 Apache APISIX的原理解析
2022/07/07 Servers