摘要:算法原理插入排序是一種簡(jiǎn)單直觀的排序算法。插入排序在實(shí)現(xiàn)上,通常采用排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。新元素插入當(dāng)前位置。
算法原理
插入排序是一種簡(jiǎn)單直觀的排序算法。它的工作原理非常類似于我們抓撲克牌。
對(duì)于未排序的數(shù)據(jù)(右手抓到的牌),在已排序序列(左后已經(jīng)排好序的牌)中從后向前掃描,找到相應(yīng)位置并插入。
插入排序在實(shí)現(xiàn)上,通常采用in-place排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。
具體算法描述如下(按從小到大排序):
從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序。
取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描
如果該元素(已排序)大于新元素,將新元素移到下一位置(即位置調(diào)換,向前移動(dòng)一個(gè)位置)。
重復(fù)步驟3,直到找到已排序的元素小于或等于新元素。即不在向前掃描。新元素插入當(dāng)前位置。
重復(fù)步驟2——4。
具體算法描述如下(按從大到小排序):
從第一個(gè)元素開(kāi)始,該元素可以認(rèn)為已經(jīng)被排序。
取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描
如果該元素(已排序)小于新元素,將新元素移到下一位置(即位置調(diào)換,向前移動(dòng)一個(gè)位置)。
重復(fù)步驟3,直到找到已排序的元素大于或等于新元素。即不在向前掃描。新元素插入當(dāng)前位置。
重復(fù)步驟2——4。
代碼實(shí)現(xiàn)插入排序?qū)崿F(xiàn)數(shù)組從小到大排序
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));
插入排序?qū)崿F(xiàn)數(shù)組從小到大排序while實(shí)現(xiàn)
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));
插入排序?qū)崿F(xiàn)數(shù)組從大到小排序
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));
插入排序?qū)崿F(xiàn)數(shù)組從大到小排序while實(shí)現(xiàn)
function maxtomin(par){ for(var i=1; i=0 && par[j] 按照父子平鋪?lái)樞蚺判?/p>
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));上面代碼排序之后結(jié)果
在線動(dòng)畫演示插入、選擇、冒泡、歸并、希爾、快速排序算法過(guò)程工具地址:http://tools.jb51.net/aidedde...
這個(gè)地址演示排序的過(guò)程非常不錯(cuò),可以好好研究。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108148.html
摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實(shí)現(xiàn)思路有點(diǎn)類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...
摘要:常見(jiàn)的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見(jiàn)的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:常見(jiàn)的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見(jiàn)的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:常見(jiàn)的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過(guò)程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見(jiàn)的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:代碼實(shí)現(xiàn)六堆排序算法簡(jiǎn)介堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。九計(jì)數(shù)排序算法簡(jiǎn)介計(jì)數(shù)排序是一種穩(wěn)定的排序算法。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 1、插入排序 1)算法簡(jiǎn)介 插入排序(Insertion-Sort)的算法描述是一種簡(jiǎn)單直觀的排序算法。它...
摘要:實(shí)現(xiàn)插入排序插入排序是一種非常簡(jiǎn)單的算法,最適合大部分已經(jīng)被排好序的數(shù)據(jù)。由此才有了這個(gè)名字插入排序。插入排序的最壞情況是輸入的數(shù)組是按逆序排序的??偨Y(jié)當(dāng)輸入的數(shù)組已經(jīng)大部分被排好序時(shí),插入排序的效果最佳。 翻譯:瘋狂的技術(shù)宅https://medium.com/@jimrottin... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 插入排序的工作原理...
閱讀 3851·2023-04-26 02:07
閱讀 3293·2021-09-22 15:55
閱讀 2615·2021-07-26 23:38
閱讀 3211·2019-08-29 15:16
閱讀 2071·2019-08-29 11:16
閱讀 1829·2019-08-29 11:00
閱讀 3724·2019-08-26 18:36
閱讀 3233·2019-08-26 13:32