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 相关文章推荐
jquery实现div拖拽宽度示例代码
Jul 31 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
noty ? jQuery通知插件全面解析
May 18 Javascript
AngularJS  $modal弹出框实例代码
Aug 24 Javascript
轻松掌握JavaScript单例模式
Aug 25 Javascript
基于JavaScript实现鼠标向下滑动加载div的代码
Aug 31 Javascript
微信小程序之仿微信漂流瓶实例
Dec 09 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
May 02 Javascript
Vue.js分页组件实现:diVuePagination的使用详解
Jan 10 Javascript
Webpack 之 babel-loader文件预处理器详解
Mar 23 Javascript
微信小程序自定义toast弹窗效果的实现代码
Nov 15 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
微信小程序之多列表的显示和隐藏功能【附源码】
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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php whois查询API制作方法
2011/06/23 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
(function(){})()的用法与优点
2007/03/11 Javascript
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
33个优秀的 jQuery 图片展示插件分享
2012/03/14 Javascript
jQuery.query.js 取参数的两点问题分析
2012/08/06 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
详解jQuery简单的表单应用
2016/12/16 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
puppeteer库入门初探
2019/01/09 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
jqGrid表格底部汇总、合计行footerrow处理
2019/08/21 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python字符串处理实例详解
2017/05/18 Python
Python单体模式的几种常见实现方法详解
2017/07/28 Python
python绘制条形图方法代码详解
2017/12/19 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
python networkx 包绘制复杂网络关系图的实现
2019/07/10 Python
Django REST framework内置路由用法
2019/07/26 Python
CSS3实现的文本3D效果附图
2014/09/03 HTML / CSS
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
如何写一份好的自荐信
2014/01/02 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书
2019员工保密协议书(3篇)
2019/09/23 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers
ubuntu如何搭建vsftpd服务器
2022/12/24 Servers