js 数组排序

javascript提供一些内置的方法进行排序,例如:sort,reverse()方法等

reverse()方法

 就是用于 颠倒数组中元素的顺序 ,例如:

var array=new Array(2);
array[0]="hello";
array[1]="alice";
console.log(array);
console.log(array.reverse());
//输出的结果分别为:["hello", "alice"] ,["alice", "hello"]

 

sort()语法:

arrayObject.sort(sortby);//sortby可选 ,用来规定排序顺序,必须是函数 

但是调用此方法的时候 ,有时得到意料之外的结果 ,例如: 

  var array1 = [0,1,5,10,15];
 array1.sort();//结果为:0,1,10,15,5

这是因为 sort()排序的 时候会调用 toString()函数,转换为字符串进行比较 。

改进方法如下:

var array1=[0,1,5,10,15];
array1.sort(function(a,b){
   return a-b
});
//输出结果为: [0, 1, 5, 10, 15]

 

冒泡排序

sort(),reverse()方法都是js数组提供的方法 ,可以用冒泡排序来实现排序,例如以下代码:

function bubSort(array){
   for(var i=0;i<array.length;i++){
      for(var j=i+1;j<array.length;j++){
         if(array[i]>array[j]){
           //交换值
           var b=array[i];
           array[i]=array[j];
           array[j]=b;
        }
     }
   }
   return array;
}
var array=[3,5,1,8,2,9]; bubSort(array);

原型写法如下:

Array.prototype.bobSort=function(){
     for(var i=0;i<this.length;i++){
      for(var j=i+1;j<this.length;j++){
         if(this[i]>this[j]){
           var b=this[i];
           this[i]=this[j];
           this[j]=b;
        }
     }
   }
   return this;
}
var array=[3,5,1,8,2,9];
array.bobSort();

 

递归算法

例如: 1,2,3,5,8,13,21,34求第30个数是多少(要求使用递归算法)

首先要看懂这个数字规律,即第三项等于前两项的和,即 1+2=3,2+3=5,3+5=8,5+8=13,8+13=21......

js代码实现如下:

function getNumber(n){
    if(n<=3){
      return n;
   }else{
      return getNumber(n-1)+getNumber(n-2);//可以用 return arguments.callee(n-1)+arguments.callee(n-2);来替换,arguments.caller调用自身
    }
}

var num=getNumber(30)
console.log(num);

 

posted on 2016-03-15 15:38  Alice.Luo  阅读(301)  评论(0编辑  收藏  举报