js中數(shù)組排序sort方法的原理分析
本文實(shí)例分析了js中數(shù)組排序sort方法的原理。分享給大家供大家參考。具體分析如下:
最近在百度的項(xiàng)目中要用到對(duì)數(shù)組進(jìn)行排序,當(dāng)然一開始自然想到了數(shù)組的sort方法,這方法應(yīng)用非常簡(jiǎn)單,大致如下:
var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98];
var arr2=["George","John","Thomas","James","Adrew","Martin"];
function arrsort(a,b){
return a-b;
}
console.log(arr.sort(arrsort)); //數(shù)字排序需要函數(shù),如果要從大排到小,就return b-a;
console.log(arr2.sort()); //字母不需要
}
但是我突然想到,sort用法為什么這么簡(jiǎn)單,其原理到底是什么呢?于是我試著不用sort對(duì)數(shù)組排序,原理是找到數(shù)組的最小值插入到新數(shù)組,然后刪除數(shù)組中的這個(gè)最小值,更新數(shù)組后繼續(xù)尋找最小值插入,如此循環(huán),代碼如下:
var arr=[2,55,55,1,75,3,9,35,70,166,432,678,32,98];
var len=arr.length;
console.log(arr.join(","));
var newarr=[];
for(var i=0;i<len;i++){
newarr.push(Math.min.apply(null,arr)); //把最小值插入新數(shù)組
arr.splice(r(arr,Math.min.apply(null,arr)),1); //插入后,立馬刪除最小值
}
//找到最小值在數(shù)組中的位置
function r(s,v){
for(k in s){
if(s[k] == v){
return k;
}
}
}
console.log(newarr.join(","))
}
PS:這只是我寫的一個(gè)方法,sort的原理應(yīng)該不是這樣的,還可以用冒泡法對(duì)數(shù)組排序,代碼我就不寫了,網(wǎng)上一大堆.當(dāng)然上面的代碼只是對(duì)數(shù)字?jǐn)?shù)組進(jìn)行了排序,對(duì)于字符串的排序,可以考慮字符串的localeCompare方法.
希望本文所述對(duì)大家的javascript程序設(shè)計(jì)有所幫助。
相關(guān)文章
javascript面向?qū)ο蟀b類Class封裝類庫剖析
一個(gè)從來沒有接觸過javascript的技術(shù)人員,幾小時(shí)內(nèi)就可以寫出一個(gè)簡(jiǎn)單有用的程序代碼;想寫出高性能的代碼,同樣需要具備一個(gè)高級(jí)程序員的基本素養(yǎng),javascript也是如此2013-01-01微信小程序前后端數(shù)據(jù)交互的詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于微信小程序前后端數(shù)據(jù)交互的相關(guān)資料,通過小程序向后端發(fā)送請(qǐng)求,然后后端從數(shù)據(jù)庫獲取車源和求購的數(shù)量反饋給小程序,最后將這兩個(gè)數(shù)據(jù)顯示出來,需要的朋友可以參考下2022-10-10javascript原始值和對(duì)象引用實(shí)例分析
這篇文章主要介紹了javascript原始值和對(duì)象引用的方法,實(shí)例分析了javascript原始值和對(duì)象引用的功能、定義與相關(guān)技巧,需要的朋友可以參考下2015-04-04js獲取觸發(fā)事件元素在整個(gè)網(wǎng)頁中的絕對(duì)坐標(biāo)(示例代碼)
這篇文章主要介紹了js獲取觸發(fā)事件元素在整個(gè)網(wǎng)頁中的絕對(duì)坐標(biāo)。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法
這篇文章主要介紹了JS基于遞歸算法實(shí)現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法,涉及JS遞歸算法操作數(shù)組實(shí)現(xiàn)排序功能的相關(guān)技巧,需要的朋友可以參考下2017-01-01微信開發(fā)之企業(yè)付款到銀行卡接口開發(fā)的示例代碼
這篇文章主要介紹了微信開發(fā)之企業(yè)付款到銀行卡接口開發(fā)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09使用Web?Component實(shí)現(xiàn)防篡改水印
Web?Component內(nèi)部有鉤子天然支持被篡改時(shí)被觸發(fā),用來防篡改非常方便,所以本文就將使用Web?Component實(shí)現(xiàn)防篡改水印,感興趣的小伙伴可以了解下2023-12-12