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 相关文章推荐
关于可运行代码无法正常执行的使用说明
May 13 Javascript
JS数字抽奖游戏实现方法
May 04 Javascript
JavaScript如何自定义trim方法
Jul 28 Javascript
基于javascript实现图片左右切换效果
Jan 25 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
Jan 04 Javascript
Bootstrap页面缩小变形的快速解决办法
Feb 03 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
Jan 08 Javascript
JavaScript多态与封装实例分析
Jul 27 Javascript
从源码里了解vue中的nextTick的使用
Nov 22 Javascript
node.js使用express框架进行文件上传详解
Mar 03 Javascript
vue-router之实现导航切换过渡动画效果
Oct 31 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
检测png图片是否完整的php代码
2010/09/06 PHP
PHP的几个常用数字判断函数代码
2012/04/24 PHP
PHP随机生成随机个数的字母组合示例
2014/01/14 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
JavaScript仿支付宝6位数字密码输入框
2016/12/29 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
微信小程序实现上拉加载功能
2019/11/20 Javascript
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
Python计算字符宽度的方法
2016/06/14 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
详解Pandas之容易让人混淆的行选择和列选择
2019/07/10 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python模块future用法原理详解
2020/01/20 Python
基于Python数据分析之pandas统计分析
2020/03/03 Python
Python中qutip用法示例详解
2020/10/02 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
Python是如何进行类型转换的
2013/06/09 面试题
土木工程专业大学毕业生求职信
2013/10/13 职场文书
大学教师年终总结的自我评价
2013/10/29 职场文书
建筑专业毕业生推荐信
2013/11/21 职场文书
大学生涯自我鉴定
2014/01/16 职场文书
酒店端午节活动方案
2014/08/26 职场文书
2014年学校工会工作总结
2014/12/06 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书