摘要:一排序算法原生排序算法參數(shù)比較函數(shù)可選若無參數(shù)則按照首字母的碼排序比較函數(shù)的作用為確定排序按數(shù)組中對(duì)象的某一屬性排序冒泡排序原理從第一個(gè)元素開始依次同相鄰元素比較,小于則交換,直到比較完最后一個(gè)元素,否則停止,完成一個(gè)元素的冒泡行為。
一、排序算法
1、Array.sort(function)(JavaScript原生排序算法)
參數(shù):比較函數(shù)(可選)
若無參數(shù),則按照首字母的ASCII碼排序,比較函數(shù)的作用為確定排序
function(value1,value2){ if (value1 > value2) { return 1; }else if (value1 < value2) { return -1 }else { return 0 } }
按數(shù)組中對(duì)象的某一屬性排序:
function compared(property){ return function(a,b){ let value1 = a[property]; let value2 = b[property]; return value2 - value1; } } array.sort(compared("property"));
2、冒泡排序
原理:從第一個(gè)元素開始依次同相鄰元素比較,小于則交換,直到比較完最后一個(gè)元素,否則停止,完成一個(gè)元素的冒泡行為。循環(huán)進(jìn)入下一元素。
核心算法:
for(let i=0;iarr[j]){ [arr[i],arr[j]] = [arr[j],arr[i]];//交換相鄰值 } } }
3、選擇排序
原理:每次選擇最大的元素,依次至于末尾。
核心算法:
let len = arr.length; for(let i=0;i4、插入排序
原理:從第二個(gè)元素開始,依次向前插入(插入時(shí)前面為有序數(shù)列),直到最后一個(gè)元素。
核心代碼:let len = arr.length; for(let i=1;i5、快速排序
原理:選取一個(gè)基準(zhǔn)元素,以此分為兩組,大于基準(zhǔn)元素和小于基準(zhǔn)元素組。然后遞歸兩個(gè)子數(shù)組。最后把數(shù)組連接起來。
function quickSort(arr){let len = arr.length; if(len<=1){//遞歸出口 return arr; } let mid = Math.floor(len/2) ,left = [] ,right = []; arr.forEach((item)=>{ if(item>arr[mid]){ left.push(item) }else { right.push(item) } }) let _left = quickSort(left) ,_right = quickSort(right); retrun left.concat(arr[mid],right)}
各算法的性能測試:(測試數(shù)據(jù)來源https://blog.csdn.net/shuaige...)
數(shù)據(jù)結(jié)果如下
冒泡排序耗時(shí)26000ms左右
選擇排序耗時(shí)5800ms左右
插入排序耗時(shí)10600ms左右
歸并排序耗時(shí)80-100ms
快速排序
cutoff==5--->30-50ms
cutoff==10 --->30-60ms
cutoff==50 ---->40-50ms
cutoff==3效果不錯(cuò)--->30-50ms,30ms出現(xiàn)的機(jī)會(huì)很多
cutoff==0時(shí)(即不在分割長度短的時(shí)候轉(zhuǎn)為插入排序),效果依然不錯(cuò),30-50ms,30ms出現(xiàn)的很多堆排序耗時(shí)120-140ms
JavaScript提供的原生排序耗時(shí)55-70ms
結(jié)論
快速排序效率最高,cutoff取3效果最好(沒有懸念)
原生排序竟然是第二快的排序算法!諸位同學(xué)參加筆試的時(shí)候,在沒有指明必須要用哪種排序算法的情況下,如果需要排個(gè)序,還是用原生的yourArr.sort(function(a,b){return a-b})吧,畢竟不易錯(cuò)還特別快!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/108925.html
摘要:還以為我是一個(gè)失業(yè)青年,后來想想,后已經(jīng)是中年了。對(duì)于各路框架,還是根據(jù)業(yè)務(wù)需求去學(xué)習(xí)比較好,相信自己的學(xué)習(xí)能力。我還是先鞏固一下數(shù)據(jù)結(jié)構(gòu)和算法吧。數(shù)據(jù)結(jié)構(gòu)與算法的描述針對(duì)自己目前所處的環(huán)境,就用來描述常用的數(shù)據(jù)結(jié)構(gòu)跟常用的算法。 失業(yè)中年 前段時(shí)間,帶我出道的CTO要帶我去創(chuàng)業(yè),然后,之前談好的技術(shù)方案在我過去之后都沒能開始,怪可惜的,甚至,他自己都背鍋離職了。再后來,股東突然撤資了...
摘要:代碼實(shí)現(xiàn)六堆排序算法簡介堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。九計(jì)數(shù)排序算法簡介計(jì)數(shù)排序是一種穩(wěn)定的排序算法。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 1、插入排序 1)算法簡介 插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:技巧使你的更加專業(yè)這是上關(guān)于技巧的一篇譯文,另外你也可以在本項(xiàng)目看到原文。列舉了一些很實(shí)用的技巧,比如給空內(nèi)容的標(biāo)簽添加內(nèi)容,逗號(hào)分隔列表等等。排序算法看源碼,把它背下來吧排序算法的封裝。主要幫助初學(xué)者更好的掌握排序算法的實(shí)現(xiàn)。 成為專業(yè)程序員路上用到的各種優(yōu)秀資料、神器及框架 成為一名專業(yè)程序員的道路上,需要堅(jiān)持練習(xí)、學(xué)習(xí)與積累,技術(shù)方面既要有一定的廣度,更要有自己的深度。 Java...
摘要:另一種垃圾收集算法是引用計(jì)數(shù),這種算法的思想是跟蹤記錄所有值被引用的次數(shù)。當(dāng)代碼中存在循環(huán)引用現(xiàn)象時(shí),引用計(jì)數(shù)算法就會(huì)導(dǎo)致問題。 垃圾回收 javascript不同于c、c++的一個(gè)特點(diǎn)是:具有自動(dòng)的垃圾回收機(jī)制,這就意味著,開發(fā)人員可以專注于業(yè)務(wù),而不必把過多精力放在內(nèi)存的管理上,提高開發(fā)效率。 所謂的垃圾回收就是找出那些不再繼續(xù)使用的變量,然后釋放其占用的內(nèi)存。為此,垃圾收集器...
閱讀 2157·2021-11-12 10:36
閱讀 2149·2021-09-03 10:41
閱讀 2762·2021-08-19 10:57
閱讀 1233·2021-08-17 10:14
閱讀 1489·2019-08-30 15:53
閱讀 1211·2019-08-30 15:43
閱讀 976·2019-08-30 13:16
閱讀 2986·2019-08-29 16:56