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 select的操作实现代码
May 06 Javascript
JavaScript写的一个DIV 弹出网页对话框
Aug 14 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
基于jQuery实现模拟页面加载进度条
Apr 01 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 Javascript
js判断节假日实例代码
Dec 27 Javascript
小程序点赞收藏功能的实现代码示例
Sep 07 Javascript
JS对象和字符串之间互换操作实例分析
Feb 02 Javascript
微信小程序如何使用canvas二维码保存至手机相册
Jul 15 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
Dec 12 Javascript
纯js实现无缝滚动功能代码实例
Feb 21 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 常用类汇总 推荐收藏
2010/05/13 PHP
PHP判断函数是否被定义的方法
2019/06/21 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
优化 JavaScript 代码的方法小结
2009/07/16 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
Chrome扩展页面动态绑定JS事件提示错误
2014/02/11 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
jQuery+正则+文本框只能输入数字的实现方法
2016/10/07 Javascript
vue中的$emit 与$on父子组件与兄弟组件的之间通信方式
2018/05/13 Javascript
Vuex的实战使用详解
2019/10/31 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
python虚拟环境virtualenv的使用教程
2017/10/20 Python
python实现人民币大写转换
2018/06/20 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
python中前缀运算符 *和 **的用法示例详解
2020/05/28 Python
canvas 基础之图像处理的使用
2020/04/10 HTML / CSS
世界领先的艺术图书出版社:TASCHEN
2018/07/23 全球购物
Watch Station官方网站:世界一流的手表和智能手表
2020/01/05 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
音乐专业自荐信
2014/02/07 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
物理学专业自荐信
2014/06/11 职场文书
学校搬迁方案
2014/06/15 职场文书
青年文明号口号
2014/06/17 职场文书
创先争优标语
2014/06/27 职场文书
幼儿园大班开学寄语(2016秋季)
2015/12/03 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
检讨书之工作不认真
2019/08/14 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android