js中數(shù)組排序sort方法的原理分析
更新時間:2014年11月20日 09:41:49 投稿:shichen2014
這篇文章主要介紹了js中數(shù)組排序sort方法的原理,以實例形式分析了sort排序方法的運行機制,具有一定的參考借鑒價值,需要的朋友可以參考下
本文實例分析了js中數(shù)組排序sort方法的原理。分享給大家供大家參考。具體分析如下:
最近在百度的項目中要用到對數(shù)組進行排序,當(dāng)然一開始自然想到了數(shù)組的sort方法,這方法應(yīng)用非常簡單,大致如下:
復(fù)制代碼 代碼如下:
window.onload=function(){
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()); //字母不需要
}
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用法為什么這么簡單,其原理到底是什么呢?于是我試著不用sort對數(shù)組排序,原理是找到數(shù)組的最小值插入到新數(shù)組,然后刪除數(shù)組中的這個最小值,更新數(shù)組后繼續(xù)尋找最小值插入,如此循環(huán),代碼如下:
復(fù)制代碼 代碼如下:
window.onload=function(){
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(","))
}
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:這只是我寫的一個方法,sort的原理應(yīng)該不是這樣的,還可以用冒泡法對數(shù)組排序,代碼我就不寫了,網(wǎng)上一大堆.當(dāng)然上面的代碼只是對數(shù)字?jǐn)?shù)組進行了排序,對于字符串的排序,可以考慮字符串的localeCompare方法.
希望本文所述對大家的javascript程序設(shè)計有所幫助。
相關(guān)文章
javascript面向?qū)ο蟀b類Class封裝類庫剖析
一個從來沒有接觸過javascript的技術(shù)人員,幾小時內(nèi)就可以寫出一個簡單有用的程序代碼;想寫出高性能的代碼,同樣需要具備一個高級程序員的基本素養(yǎng),javascript也是如此2013-01-01微信小程序前后端數(shù)據(jù)交互的詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于微信小程序前后端數(shù)據(jù)交互的相關(guān)資料,通過小程序向后端發(fā)送請求,然后后端從數(shù)據(jù)庫獲取車源和求購的數(shù)量反饋給小程序,最后將這兩個數(shù)據(jù)顯示出來,需要的朋友可以參考下2022-10-10js獲取觸發(fā)事件元素在整個網(wǎng)頁中的絕對坐標(biāo)(示例代碼)
這篇文章主要介紹了js獲取觸發(fā)事件元素在整個網(wǎng)頁中的絕對坐標(biāo)。需要的朋友可以過來參考下,希望對大家有所幫助2013-12-12JS基于遞歸算法實現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法
這篇文章主要介紹了JS基于遞歸算法實現(xiàn)1,2,3,4,5,6,7,8,9倒序放入數(shù)組中的方法,涉及JS遞歸算法操作數(shù)組實現(xiàn)排序功能的相關(guān)技巧,需要的朋友可以參考下2017-01-01微信開發(fā)之企業(yè)付款到銀行卡接口開發(fā)的示例代碼
這篇文章主要介紹了微信開發(fā)之企業(yè)付款到銀行卡接口開發(fā)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09