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 相关文章推荐
jscript之List Excel Color Values
Jun 13 Javascript
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
Sep 25 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
Jun 19 Javascript
解决JS请求服务器gbk文件乱码的问题
Oct 16 Javascript
再次谈论React.js实现原生js拖拽效果引起的一系列问题
Apr 03 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
完美解决input[type=number]无法显示非数字字符的问题
Feb 28 Javascript
vue项目中全局引入1个.scss文件的问题解决
Aug 01 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
Feb 10 Javascript
openlayers 3实现车辆轨迹回放
Sep 24 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
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
微信小程序实用代码段(收藏版)
2019/12/17 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
[57:41]Secret vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[49:35]KG vs SECRET 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
Django的信号机制详解
2017/05/05 Python
基于ID3决策树算法的实现(Python版)
2017/05/31 Python
详解如何在python中读写和存储matlab的数据文件(*.mat)
2018/02/24 Python
TensorFlow实现模型评估
2018/09/07 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
python数据挖掘需要学的内容
2019/06/23 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
Python collections中的双向队列deque简单介绍详解
2019/11/04 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
音乐专业应届生教师求职信
2013/11/04 职场文书
教师产假请假条范文
2014/04/10 职场文书
保密工作目标责任书
2014/07/28 职场文书
公安四风对照检查材料思想汇报
2014/10/11 职场文书
2015年采购部工作总结
2015/04/23 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
go开发alertmanger实现钉钉报警
2021/07/16 Golang