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
Feb 25 Javascript
不安全的常用的js写法
Sep 15 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
Js切换功能的简单方法
Nov 23 Javascript
利用a标签自动解析URL分析网址实例
Oct 20 Javascript
数组Array的排序sort方法
Feb 17 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
Jun 04 Javascript
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
使用jquery+iframe做一个ajax上传效果(实例)
Aug 24 jQuery
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
Nov 15 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
Aug 27 Javascript
带你使用webpack快速构建web项目的方法
Nov 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
PHP 高手之路(一)
2006/10/09 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
2014/01/14 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
Prototype Template对象 学习
2009/07/19 Javascript
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
js Dialog 实践分享
2012/10/22 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
js改变Iframe中Src的方法
2015/05/05 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
jQuery hover事件简单实现同时绑定2个方法
2016/06/07 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
jquery css实现流程进度条
2020/03/26 jQuery
Python set集合类型操作总结
2014/11/07 Python
用Python编写一个简单的俄罗斯方块游戏的教程
2015/04/03 Python
详细解读Python中解析XML数据的方法
2015/10/15 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python argparse模块应用实例解析
2019/11/15 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Django 实现图片上传和下载功能
2020/12/31 Python
微软英国官方网站:Microsoft英国
2016/10/15 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
SQL语言面试题
2013/08/27 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
Windows和Linux动态库应用异同
2016/07/28 面试题
科技工作者先进事迹
2014/08/16 职场文书
重阳节演讲稿:尊敬帮助老人 弘扬传统美德
2014/09/25 职场文书
初中生毕业评语
2014/12/29 职场文书
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python