sort() 方法在適當的位置對數組的元素進行排序,並返回數組。html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> var arr=[1,11,2,22,5,4,0]; arr.sort(); alert(arr);//[0,1,11,2,22,4,5] </script> </head> <body> </body> </html>
由上圖能夠看出:數組會按照字符的Unicode進行排序(把數組裏面當成字符串處理)。算法
按升序排列:數組
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> 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] </script> </head> <body> </body> </html>
隨機排序:dom
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> var arr=[1,11,2,22,5,4,0]; arr.sort( function(n1,n2){ return Math.random()-0.5; }); alert(arr); </script> </head> <body> </body> </html>
怎麼查看sort()方法是若是實現排序的呢?咱們能夠在比較函數裏把a,b及數組輸出一下,看看是否可以看出使用的排序算法。函數
var arr=[1, 8, 3, 5, -1]; function compare(a,b){ console.log(a,b,arr); return a-b; } arr.sort(compare); /** 控制檯輸出 1 8 [1, 8, 3, 5, -1] 8 3 [1, 8, 3, 5, -1] 1 3 [1, 8, 8, 5, -1] 8 5 [1, 3, 8, 5, -1] 3 5 [1, 3, 8, 8, -1] 8 -1 [1, 3, 5, 8, -1] 5 -1 [1, 3, 5, 8, 8] 3 -1 [1, 3, 5, 5, 8] 1 -1 [1, 3, 3, 5, 8] [-1,1, 3, 5, 8] */
第一次1和8比較,1<8,不須要調整位置。 spa
第二次8和3比較,8>3,須要調整位置。可是這裏沒有交換位置,僅僅是8覆蓋了3位置。這裏就能夠推斷出不是單純的使用了冒泡算法。
第三是1和3比較,1<3,3替換了8的位置。什麼鬼,幾個意思???看到這裏我也是表示不懂呀。那就繼續往下看咯。 code
第四是8和5比較,8>5,又僅僅是覆蓋,沒有交換位置。仍是不懂,繼續往下!
第五是3和5比較,3<5,5替換了8的位置,不懂,繼續往下! htm
第六是8和-1比較,8>-1, 還僅僅是覆蓋,繼續往下!
第7、8、九次,-1依次和5,3,1作了比較,而且5,3,1都移動了一次位置。 blog
咱們得出告終論:sort()方法是使用的冒泡和插入兩種方式結合進行排序的。排序
模擬排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script> 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); </script> </head> <body> </body> </html>