sort() 方法在適當的位置對數組的元素進行排序,並返回數組。數組會按照字符的Unicode進行排序(把數組里面當成字符串處理)
1. 按升序排列:
var arr=[1,11,2,22,5,4,0]; arr.sort( function(n1,n2){ return n1-n2; }); alert(arr);//[0,1,2,4,5,11,22]
2. 隨機排序:
var arr=[1,11,2,22,5,4,0]; arr.sort( function(n1,n2){ return Math.random()-0.5; }); alert(arr);
3. 按降序排列:
var arr=[1,11,2,22,5,4,0]; arr.sort( function(n1,n2){ return n2-n1; }); alert(arr);
4. 根據參數屬性值排序(sort方法接收一個函數作為參數,這里嵌套一層函數用來接收對象屬性名,其他部分代碼與正常使用sort方法相同。)
var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; function compare(property){ return function(a,b){ var value1 = a[property]; var value2 = b[property]; return value1 - value2; } } console.log(arr.sort(compare('age')))
5. 根據參數不同,來確定是升序排列,還是降序排序
sortBy: function(attr,rev){
//第二個參數沒有傳遞 默認升序排列
if(rev == undefined){
rev = 1;
}else{
rev = (rev) ? 1 : -1;
}
return function(a,b){
a = a[attr];
b = b[attr];
if(a < b){
return rev * -1;
}
if(a > b){
return rev * 1;
}
return 0;
}
}
newArray.sort(sortBy('number',false))
V8 引擎 sort 函數只給出了兩種排序 InsertionSort 和 QuickSort,數量小於10的數組使用 InsertionSort,比10大的數組則使用 QuickSort。
原理:sort()方法如何實現排序
第一次1和8比較,1<8,不需要調整位置。 第二次8和3比較,8>3,需要調整位置。但是這里沒有交換位置,僅僅是8覆蓋了3位置。這里就可以推斷出不是單純的使用了冒泡算法。 第三是1和3比較,1<3,3替換了8的位置。什么鬼,幾個意思???看到這里我也是表示不懂呀。那就繼續往下看咯。 第四是8和5比較,8>5,又僅僅是覆蓋,沒有交換位置。還是不懂,繼續往下! 第五是3和5比較,3<5,5替換了8的位置,不懂,繼續往下! 第六是8和-1比較,8>-1, 還僅僅是覆蓋,繼續往下! 第七、八、九次,-1依次和5,3,1做了比較,並且5,3,1都移動了一次位置。
我們得出了結論:sort()方法是使用的冒泡和插入兩種方式結合進行排序的。
模擬排序:
var arr=[32,12,4,20,1,54,56,6,14]; function findMinIndex(arr,start){ var iMin=arr[start]; var iMinIndex=start; for(var i=start;i<arr.length;i++){ if(iMin>arr[i]){ iMin=arr[i]; iMinIndex=i; } } return iMinIndex; } for(var i=0;i<arr.length;i++){ var n=findMinIndex(arr,i); var tem; tem=arr[n]; arr[n]=arr[i]; arr[i]=tem; } alert(arr);