sort排序到底怎么排序
sort()方法
sort() 方法在适当的位置对数组的元素进行排序,并返回数组。
<!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>
随机排序:
<!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()方法如何实现排序
怎么查看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,不需要调整位置。
第二次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()方法是使用的冒泡和插入两种方式结合进行排序的。
模拟排序:
<!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>