本篇文章给大家带来的内容是关于js排序:js插入排序的算法原理与代码实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
算法原理
插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌。
对于未排序的数据(右手抓到的牌),在已排序序列(左后已经排好序的牌)中从后向前扫描,找到相应位置并插入。
插入排序在实现上,通常采用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<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));
上面代码排序之后结果
相关推荐:
JS实现的计数排序与基数排序算法示例_javascript技巧
以上是js排序:js插入排序的算法原理与代码实现的详细内容。更多信息请关注PHP中文网其他相关文章!

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。