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 弹出框定位实现方法
Dec 02 Javascript
详解jquery uploadify 上传文件
Nov 09 Javascript
javascript实现验证身份证号的有效性并提示
Apr 30 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
基于js中的原型、继承的一些想法
Aug 10 Javascript
canvas 绘制圆形时钟
Feb 22 Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
May 17 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
Aug 31 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
Mar 14 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
解决vue中的无限循环问题
Jul 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
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
IIS6的PHP最佳配置方法
2007/03/19 PHP
实用函数7
2007/11/08 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
JS 页面内容搜索,类似于 Ctrl+F功能的实现代码
2007/08/13 Javascript
动态添加js事件实现代码
2009/03/12 Javascript
精通Javascript系列之数值计算
2011/06/07 Javascript
40个有创意的jQuery图片、内容滑动及弹出插件收藏集之一
2011/12/31 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
JS实现的添加弹出层并完成锁屏操作示例
2017/04/07 Javascript
关于angularJs清除浏览器缓存的方法
2017/11/28 Javascript
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
React Router V4使用指南(精讲)
2018/09/17 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
深入探索VueJS Scoped CSS 实现原理
2019/09/23 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
Python库urllib与urllib2主要区别分析
2014/07/13 Python
Python内置函数—vars的具体使用方法
2017/12/04 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
Python如何实现强制数据类型转换
2019/11/22 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
关于青春的演讲稿800字
2014/08/22 职场文书
感恩教师节演讲稿
2014/09/03 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
三好生演讲稿
2014/09/12 职场文书
追悼会答谢词
2015/01/05 职场文书
迎国庆主题班会
2015/08/17 职场文书
2017元旦晚会开幕词
2016/03/03 职场文书
导游词之山海关
2019/12/10 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL