首页 > 代码库 > 数组排序相关

数组排序相关

1.sort 方法

sort()对数组排序,不开辟新的内存,对原有数组进行调换,即影响原数组。

1.1简单排序

<script>
   var arr=new Array(1,5,4,3);
   arr.sort();
   console.log(arr.join); //[1,3,4,5];
</script>

问题: 由简单数字组成的数组不可以用这种方法排序

例如:var arr=[12,3,44,5];

        console.log(arr.sort());

       结果是: [12,3,44,5];

  因为js默认比较函数是把要排序的元素都视为字符串,不能在比较这些元素之前先检测他们的类型,所以按字符串排序。

1.2自定义排序

<script>
   var arr=new Array(1,5,4,3);
   arr.sort(function(a,b){
     return b-a;
  });
   console.log(arr); 
</script>

a,b表示数组中的任意两个元素,如果返回值大于0,b在前,a在后,按从大到小排序。

 返回值小于0,b在后,a在前,按从小到大排序。

 return a-b 按从小到大排序,b-a按从大到小排序。

参考文章:http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html

 

2.冒泡排序

 

 function bubbleSort(array){

    var i=0,len=array.length,j,d;

    for(;i<len;i++){

     for(var j=0;j<len;j++){

        if(array[i]<array[j]){

        d=array[i];array[j]=array[i];array[i]=d;

        }

     }

   }

  return array;

}

3.插入排序  从下标1开始 每增1项排序依次,越往后遍历次数越多

var arr=[1,6,4,3,8];
  function sort1(array){
    var len=array.length,i,j,tmp,result;
    //设置数组副本
   result=array.slice(0);
   for(var i=1;i<len;i++){
      tmp=array[i];
      j=i-1;
      while(j>=0 && tmp<result[j]){
         result[j+1]=result[j];
        j--;
      }
     result[j+1]=tmp;
  }
  return result;
   
 }

4.二分法插入排序

//现在有序区通过二分查找的方法找到移动元素的起始位置,然后通过这个起始位置将后面的所有元素后移。

function sort2(array){
   var len=array.length,i,j,tmp,low,high,mid,result;
    result=array.slice(0);
     for(var i=0;i<len;i++){
      tmp=result[i];
      low=0;
      high=i-1;
      while(low<=high){
        mid=parseInt((low+high)/2,10);
        if(tmp<result[mid])high=mid-1;
        else low=mid+1;
       }
     for(var j=i-1;j>high+1;j--){
          result[j+1]=result[j];
       }
     result[j+1]=tmp;
    }

   return result;

}

还有很多,今天先学习到这里。原文请戳这里:http://www.jianshu.com/p/7e6589306a27

 

数组排序相关