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代码
Dec 15 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
js实现一个链接打开两个链接地址的方法
May 12 Javascript
一篇看懂vuejs的状态管理神器 vuex状态管理模式
Apr 20 Javascript
vue系列之requireJs中引入vue-router的方法
Jul 18 Javascript
Vuex 使用及简单实例(计数器)
Aug 29 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
vue 地区选择器v-distpicker的常用功能
Jul 23 Javascript
layui checkbox默认选中,获取选中值,清空所有选中项的例子
Sep 02 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
ant design 日期格式化的实现
Oct 27 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/11/25 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
js replace正则表达式应用案例讲解
2013/01/17 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jQuery 选择器详解
2015/01/19 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
js断点调试心得分享(必看篇)
2017/12/08 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
VuePress 静态网站生成方法步骤
2019/02/14 Javascript
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
numpy 进行数组拼接,分别在行和列上合并的实例
2018/05/08 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
Jupyter Notebook的连接密码 token查询方式
2020/04/21 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python中判断文件结束符的具体方法
2020/08/04 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
微信小程序之html5 canvas绘图并保存到系统相册
2019/06/20 HTML / CSS
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
2014年应届大学生自我评价
2014/01/09 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
可口可乐广告词
2014/03/20 职场文书
《音乐之都维也纳》教学反思
2014/04/16 职场文书
庐山导游词
2015/02/03 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
中秋晚会致辞
2015/07/31 职场文书
2016年清明节寄语
2015/12/04 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL
nginx 配置缓存
2022/05/11 Servers