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下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
jquery ajax执行后台方法
Mar 18 Javascript
JS实现控制表格行内容垂直对齐的方法
Mar 30 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
May 30 Javascript
jQuery解决$符号命名冲突
Jun 18 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
jQuery实现的导航下拉菜单效果示例
Sep 05 Javascript
利用vue.js实现被选中状态的改变方法
Feb 08 Javascript
webpack4实现不同的导出类型
Apr 09 Javascript
ES6模板字符串和标签模板的应用实例分析
Jun 25 Javascript
vue实现点击按钮下载文件功能
Oct 11 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
Nov 01 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脚本代码
2011/02/19 PHP
php正则表达匹配中文问题分析小结
2012/03/25 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法
2015/03/07 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP+Ajax无刷新带进度条图片上传示例
2017/02/08 PHP
phpStorm2020 注册码
2020/09/17 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
地址栏上的一段语句,改变页面的风格。(教程)
2008/04/02 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
解决layui中table异步数据请求不支持自定义返回数据格式的问题
2018/08/19 Javascript
jQuery.validate.js表单验证插件的使用代码详解
2018/10/22 jQuery
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
Python全局锁中如何合理运用多线程(多进程)
2019/11/06 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
用CSS3绘制三角形的简单方法
2015/07/17 HTML / CSS
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
家得宝官网:The Home Depot(全球最大的家居装饰专业零售商)
2018/12/17 全球购物
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
计算机应用毕业生自荐信
2013/10/23 职场文书
服装设计专业毕业生推荐信
2013/11/09 职场文书
大学生实习感言
2014/01/16 职场文书
简历上的自我评价怎么写
2014/01/28 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
培训简讯范文
2015/07/20 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android