JavaScript插入排序算法原理与实现方法示例

本文实例讲述了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.jb51.net/code/HtmlJsRun测试运行结果如下:

PS:这里再为大家推荐一款关于排序的演示工具供大家参考:

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

(0)

相关推荐

  • Javascript中的常见排序算法

    具体代码及比较如下所示: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">

  • JavaScript实现经典排序算法之插入排序

    插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂.像排序一手扑克牌,开始时,我们的左手为空并且桌子上的牌面向下.然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置.为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较,拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌. 1)算法原理 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过构建有序

  • 几种经典排序算法的JS实现方法

    一.冒泡排序 function BubbleSort(array) { var length = array.length; for (var i = length - 1; i > 0; i--) { //用于缩小范围 for (var j = 0; j < i; j++) { //在范围内进行冒泡,在此范围内最大的一个将冒到最后面 if (array[j] > array[j+1]) { var temp = array[j]; array[j] = array[j+1]; arra

  • 基于JavaScript实现的插入排序算法分析

    本文实例讲述了基于JavaScript实现的插入排序算法.分享给大家供大家参考,具体如下: 根据排序过程中使用的存储器不同,可以将排序方法分为两大类:内部排序和外部排序. 内部排序是指待排序记录存放在计算机随机存储器中进行的排序过程:外部排序指的是待排序的记录数量很大,以致内存一次不能容纳全部记录,在排序过程中尚需对外存进行访问的排序过程. 下面介绍几种常见的内部排序方式: 插入排序 插入排序是一种最简单的排序方法,它的基本操作是将一个记录插入已排好序的有序表中,从而得到一个新的.记录数加1的有

  • javascript算法学习(直接插入排序)

    1.基本思想 假设待排序的记录存放在数组R[1..n]中.初始时,R[1]自成1个有序区,无序区为R[2..n].从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区. 复制代码 代码如下: <!doctype html> <html> <head><title>javascript直接插入排序</title> <meta charset = "utf-8" /> &

  • JavaScript选择排序算法原理与实现方法示例

    本文实例讲述了JavaScript选择排序算法原理与实现方法.分享给大家供大家参考,具体如下: 一.选择排序简介 冒泡排序.插入排序.选择排序合称为简单排序.下面是选择排序的思想: 假设有一个数组a,我们想象成有一个班级名叫a班,现在全班随意排成一排,排头的位置是a[0],排尾的位置是a[a.length-1].但高矮顺序不是有序的,我们想从矮到高排,排头最矮,排尾最高. 选择排序是这样工作的: 第一轮: (1)a[1]位置队员与a[0]位置队员比较,如果比a[0]位置队员矮,就把a[1]的位置

  • JS排序算法之冒泡排序,选择排序与插入排序实例分析

    本文实例讲述了JS排序算法之冒泡排序,选择排序与插入排序.分享给大家供大家参考,具体如下: 冒泡排序: 对数组的中的数据,依次比较相邻两数的大小. 如果前面的数据大于后面的数据,就交换这两个数. 时间复杂度O(n^2) function bubble(array){ var temp; for(var i=0; i<arr.length; i++){ for(var j=0; j<arr.length; j++){ if(arr[j]>arr[j+1]){ temp = arr[j+1]

  • js实现常用排序算法

    本文为大家分享了js实现常用排序算法,具体内容如下 1.冒泡排序 var bubbleSort = function (arr) { var flag = true; var len = arr.length; for (var i = 0; i < len - 1; i++) { flag = true; for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j+1]; arr

  • Javascript排序算法之合并排序(归并排序)的2个例子

    归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个

  • JS折半插入排序算法实例

    本文实例讲述了JS折半插入排序算法.分享给大家供大家参考,具体如下: function pushArrayWithIndex(arr, index, value) { // 将元素添加到数组的指定位置 var temArr = arr.slice(0, index); temArr.push(value); return temArr.concat(arr.slice(index)); } /* test for pushArrayWithIndex var arr = [1, 2, 3, 4,

  • js交换排序 冒泡排序算法(Javascript版)

    比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. function sort(elements){ for(var i=0;i<elements.length-1;i++){ for(var j=0;j<elements.length-i-1;j++){ if(elemen

随机推荐