资讯专栏INFORMATION COLUMN

javascript插入排序

warnerwu / 948人阅读

摘要:算法原理插入排序是一种简单直观的排序算法。插入排序在实现上,通常采用排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。新元素插入当前位置。

算法原理

插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌。
对于未排序的数据(右手抓到的牌),在已排序序列(左后已经排好序的牌)中从后向前扫描,找到相应位置并插入。
插入排序在实现上,通常采用in-place排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

具体算法描述如下(按从小到大排序):

从第一个元素开始,该元素可以认为已经被排序。

取出下一个元素,在已经排序的元素序列中从后向前扫描

如果该元素(已排序)大于新元素,将新元素移到下一位置(即位置调换,向前移动一个位置)。

重复步骤3,直到找到已排序的元素小于或等于新元素。即不在向前扫描。新元素插入当前位置。

重复步骤2——4。

具体算法描述如下(按从大到小排序):

从第一个元素开始,该元素可以认为已经被排序。

取出下一个元素,在已经排序的元素序列中从后向前扫描

如果该元素(已排序)小于新元素,将新元素移到下一位置(即位置调换,向前移动一个位置)。

重复步骤3,直到找到已排序的元素大于或等于新元素。即不在向前扫描。新元素插入当前位置。

重复步骤2——4。

代码实现

插入排序实现数组从小到大排序

function mintomax(par) {
  for (var i = 1; i < par.length; i++) {
    for (var j = i - 1; j >= 0; j--) {
      if (par[j + 1] < par[j]) {
        [par[j],par[j+1]]=[par[j+1],par[j]];
      } else if (par[j + 1] >= par[j]) {
        break;
      }
    }
  }
  return par;
}
var arr = [11, 2, 3, 445, 7, 32, 71, 8, 94];
console.log(mintomax(arr));

插入排序实现数组从小到大排序while实现

function mintomax(par){
  for(var i=1; i=0 && par[j]>par[j+1]){
      [par[j],par[j+1]]=[par[j+1],par[j]];
      j--;
    }
  }
  return par;
}
var arr = [11, 2, 3, 445, 7, 32, 71, 8, 94];
console.log(mintomax(arr));

插入排序实现数组从大到小排序

function maxtomin(par) {
  for (var i = 1; i < par.length; i++) {
    for (var j = i - 1; j >= 0; j--) {
      if (par[j + 1] > par[j]) {
        [par[j],par[j+1]]=[par[j+1],par[j]];
      } else if (par[j + 1] <= par[j]) {
        break;
      }
    }
  }
  return par;
}
var arr = [11, 2, 3, 445, 7, 32, 71, 8, 94];
console.log(maxtomin(arr));

插入排序实现数组从大到小排序while实现

function maxtomin(par){
  for(var i=1; i=0 && par[j]

按照父子平铺顺序排序

function datatotree(par) {
  for (var i = 1; i < par.length; i++) {
    for (var j = i-1; j >=0; j--) {
      var str1=par[j].GLZDXM+par[j].ZDXM_STDCODE;
      var str2=par[j+1].GLZDXM+par[j+1].ZDXM_STDCODE;
      if(par[j].GLZDXM==null){
        str1=par[j].ZDXM_STDCODE;
      }
      if(data[j+1].GLZDXM==null){
        str2=par[j+1].ZDXM_STDCODE;
      }
      if (str2 < str1) {
        [par[j],par[j+1]]=[par[j+1],par[j]];
      }else if(str2 >= str1){
        break;
      }
    }
  }
  return par;
}
var data = [{
    ZDXM_STDCODE: "100101",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "1001",
  },
  {
    ZDXM_STDCODE: "1001",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "",
  },
  {
    ZDXM_STDCODE: "100102",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "1001",
  },
  {
    ZDXM_STDCODE: "100201",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "1002",
  },
  {
    ZDXM_STDCODE: "1002",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "",
  },
  {
    ZDXM_STDCODE: "100202",
    ZDXM_STDNAME: "",
    FINA_YYSR: "",
    FINA_PGZHSY: "",
    FINA_SJZHSY: "",
    FINA_PGZHSYL: "",
    FINA_SJZHSYL: "",
    FINA_ZHSYLCE: "",
    FINA_SRJJL: "",
    FINA_JSSKL: "",
    FINA_HTE: "",
    GLZDXM: "1002",
  },
]
console.log(datatotree(data));

上面代码排序之后结果

在线动画演示插入、选择、冒泡、归并、希尔、快速排序算法过程工具

地址:http://tools.jb51.net/aidedde...
这个地址演示排序的过程非常不错,可以好好研究。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108148.html

相关文章

  • JavaScript 数据结构与算法之美 - 冒泡排序插入排序、选择排序

    摘要:之所以把冒泡排序选择排序插入排序放在一起比较,是因为它们的平均时间复杂度都为。其中,冒泡排序就是原地排序算法。所以冒泡排序是稳定的排序算法。选择排序思路选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法为王。 想学好前端,先练好内功,...

    canger 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列之插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    GeekQiaQia 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列之插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    cgspine 评论0 收藏0
  • JavaScript算法 ,Python算法,Go算法,java算法,C#算法系列之插入排序

    摘要:常见的内部排序算法有插入排序希尔排序选择排序冒泡排序归并排序快速排序堆排序基数排序等。插入排序在实现上,通常采用排序即只需用到的额外空间的排序,因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: showImg(https://segm...

    lufficc 评论0 收藏0
  • 常用排序算法之JavaScript实现

    摘要:代码实现六堆排序算法简介堆排序是指利用堆这种数据结构所设计的一种排序算法。九计数排序算法简介计数排序是一种稳定的排序算法。计数排序不是比较排序,排序的速度快于任何比较排序算法。 赞助我以写出更好的文章,give me a cup of coffee? 2017最新最全前端面试题 1、插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它...

    jerry 评论0 收藏0
  • JavaScript实现插入排序

    摘要:实现插入排序插入排序是一种非常简单的算法,最适合大部分已经被排好序的数据。由此才有了这个名字插入排序。插入排序的最坏情况是输入的数组是按逆序排序的。总结当输入的数组已经大部分被排好序时,插入排序的效果最佳。 翻译:疯狂的技术宅https://medium.com/@jimrottin... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 插入排序的工作原理...

    LittleLiByte 评论0 收藏0

发表评论

0条评论

warnerwu

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<