因为原装的sort这个API其实是先把要比较的数转换为字符串再进行比较的,所以并不好用
所以准备自定义一个比较器函数:
1 //sort原理--->sort(arr,compare) 2 function sort(arr,compare){ 3 if(compare===undefined){//如果compare未定义,则创建一个compare原装比较器,都转化为字符串进行比较,如果传入了自定义比较器,则调用自定义比较器进行排序 4 compare=function (a,b){//原装比较器 5 return String(a)>String(b)?1://大于0则返回1 6 String(a)>String(b)?-1://小于0则返回-1 7 0;//否则返回0 8 } 9 } 10 for(var r=1;r<arr.length;r++){//比较次数 11 for(var i=0;i<arr.length-r;i++){//前后两两比较 12 if(compare(arr[i],arr[i+1])>0){//如果x大于y 13 var temp=arr[i];//将x的值给第三方temp 14 arr[i]=arr[i+1];//将y的值给x 15 arr[i]=temp;//再将temp的值给x 16 }//也就是x和y互换位置 17 } 18 } 19 } 20 //创建自定义比较器函数 21 /*function cmp(x,y){ 22 return x-y; 23 }*/ 24 var cmp=function(a,b){return a-b;}//可以直接写在sort(cmp)中,sort(function(a,b){return a-b;}); 25 var arr=[8,3,123,15,4,9,7,1,2]; 26 arr.sort();//使用默认sort排序 27 console.log(arr.join(" ")); 28 var arr2=[8,3,123,15,4,9,7,1,2]; 29 arr2.sort(cmp);//使用自定义比较器函数排序,如果sort(cmp()),则是只执行了一次,sort(cmp)表示将cmp函数给予sort使用 30 arr2.reverse();//降序排列,先sort升序,再用reverse反转 31 console.log(arr2.join(" "));