摘要:一排序算法原生排序算法參數比較函數可選若無參數則按照首字母的碼排序比較函數的作用為確定排序按數組中對象的某一屬性排序冒泡排序原理從第一個元素開始依次同相鄰元素比較,小于則交換,直到比較完最后一個元素,否則停止,完成一個元素的冒泡行為。
一、排序算法
1、Array.sort(function)(JavaScript原生排序算法)
參數:比較函數(可選)
若無參數,則按照首字母的ASCII碼排序,比較函數的作用為確定排序
function(value1,value2){ if (value1 > value2) { return 1; }else if (value1 < value2) { return -1 }else { return 0 } }
按數組中對象的某一屬性排序:
function compared(property){ return function(a,b){ let value1 = a[property]; let value2 = b[property]; return value2 - value1; } } array.sort(compared("property"));
2、冒泡排序
原理:從第一個元素開始依次同相鄰元素比較,小于則交換,直到比較完最后一個元素,否則停止,完成一個元素的冒泡行為。循環進入下一元素。
核心算法:
for(let i=0;iarr[j]){ [arr[i],arr[j]] = [arr[j],arr[i]];//交換相鄰值 } } }
3、選擇排序
原理:每次選擇最大的元素,依次至于末尾。
核心算法:
let len = arr.length; for(let i=0;i4、插入排序
原理:從第二個元素開始,依次向前插入(插入時前面為有序數列),直到最后一個元素。
核心代碼:let len = arr.length; for(let i=1;i5、快速排序
原理:選取一個基準元素,以此分為兩組,大于基準元素和小于基準元素組。然后遞歸兩個子數組。最后把數組連接起來。
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)}
各算法的性能測試:(測試數據來源https://blog.csdn.net/shuaige...)
數據結果如下
冒泡排序耗時26000ms左右
選擇排序耗時5800ms左右
插入排序耗時10600ms左右
歸并排序耗時80-100ms
快速排序
cutoff==5--->30-50ms
cutoff==10 --->30-60ms
cutoff==50 ---->40-50ms
cutoff==3效果不錯--->30-50ms,30ms出現的機會很多
cutoff==0時(即不在分割長度短的時候轉為插入排序),效果依然不錯,30-50ms,30ms出現的很多堆排序耗時120-140ms
JavaScript提供的原生排序耗時55-70ms
結論
快速排序效率最高,cutoff取3效果最好(沒有懸念)
原生排序竟然是第二快的排序算法!諸位同學參加筆試的時候,在沒有指明必須要用哪種排序算法的情況下,如果需要排個序,還是用原生的yourArr.sort(function(a,b){return a-b})吧,畢竟不易錯還特別快!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/108925.html
摘要:還以為我是一個失業青年,后來想想,后已經是中年了。對于各路框架,還是根據業務需求去學習比較好,相信自己的學習能力。我還是先鞏固一下數據結構和算法吧。數據結構與算法的描述針對自己目前所處的環境,就用來描述常用的數據結構跟常用的算法。 失業中年 前段時間,帶我出道的CTO要帶我去創業,然后,之前談好的技術方案在我過去之后都沒能開始,怪可惜的,甚至,他自己都背鍋離職了。再后來,股東突然撤資了...
摘要:代碼實現六堆排序算法簡介堆排序是指利用堆這種數據結構所設計的一種排序算法。九計數排序算法簡介計數排序是一種穩定的排序算法。計數排序不是比較排序,排序的速度快于任何比較排序算法。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 1、插入排序 1)算法簡介 插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它...
摘要:另一種垃圾收集算法是引用計數,這種算法的思想是跟蹤記錄所有值被引用的次數。當代碼中存在循環引用現象時,引用計數算法就會導致問題。 垃圾回收 javascript不同于c、c++的一個特點是:具有自動的垃圾回收機制,這就意味著,開發人員可以專注于業務,而不必把過多精力放在內存的管理上,提高開發效率。 所謂的垃圾回收就是找出那些不再繼續使用的變量,然后釋放其占用的內存。為此,垃圾收集器...
閱讀 2169·2021-11-12 10:36
閱讀 2158·2021-09-03 10:41
閱讀 2784·2021-08-19 10:57
閱讀 1247·2021-08-17 10:14
閱讀 1500·2019-08-30 15:53
閱讀 1220·2019-08-30 15:43
閱讀 983·2019-08-30 13:16
閱讀 2995·2019-08-29 16:56