您好,欢迎来到吉趣旅游网。
搜索
您的当前位置:首页js排序:js插入排序的算法原理与代码实现

js排序:js插入排序的算法原理与代码实现

来源:吉趣旅游网
本篇文章给大家带来的内容是关于js排序:js插入排序的算法原理与代码实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

算法原理

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

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

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

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

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

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

  • 重复步骤2——4。

  • 2340336496-57a5785107f78_articlex.gif

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

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

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

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

  • 重复步骤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<par.length; i++){
     j=i-1;
     while(j>=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<par.length; i++){
     j=i-1;
     while(j>=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(maxtomin(arr));
  • 按照父子平铺顺序排序

  • 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));
  • 上面代码排序之后结果

  • 2593246121-5b727b965b981_articlex.png

    Copyright © 2019- jqkq.cn 版权所有

    违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

    本站由北京市万商天勤律师事务所王兴未律师提供法律服务