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 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
Oct 18 Javascript
javascript对下拉列表框(select)的操作实例讲解
Nov 29 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
Feb 23 Javascript
JavaScript实现重置表单(reset)的方法
Apr 02 Javascript
jQuery实现三级菜单的代码
May 09 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
vue组件父子间通信之综合练习(聊天室)
Nov 07 Javascript
javascript中的this作用域详解
Jul 15 Javascript
微信小程序实现滚动Tab选项卡
Nov 16 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的header和asp中的redirect比较
2006/10/09 PHP
php小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
使用php 获取时间今天明天昨天时间戳的详解
2013/06/20 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
javascript 清除输入框中的数据
2009/04/13 Javascript
js confirm()方法的使用方法实例
2013/07/13 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
canvas 画布在主流浏览器中的尺寸限制详细介绍
2016/12/15 Javascript
vue-cli中安装方法(图文详细步骤)
2018/12/12 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python打包可执行文件的方法详解
2016/09/19 Python
python cs架构实现简单文件传输
2020/03/20 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
资金主管岗位职责范本
2014/03/04 职场文书
2014预备党员党课学习心得范文
2014/07/08 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
医德医魂心得体会
2014/09/11 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
欠条范文
2015/07/03 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers