js算法(1)

数组排序

arr.sort(function compare(a,b){return b.value-a.value});

json 排序

$.getJSON('URl',function(data){

    data.sort(function(a,b){return a.demoname-b.demoname});
})
排序
1、冒泡排序
 1     var arr = [1,4,2,6,8,5,1,3,4];
 2     var temp ;
 3     for (var i = 0; i < arr.length-1; i++){
 4       for (var j = 0; j < arr.length-i-1 ; j++){
 5         if (arr[j] > arr[j + 1]){                        
 6           temp = arr[j + 1];
 7           arr[j + 1] = arr[j]; 
 8           arr[j] = temp;
 9         }
10       }
11     }
12     console.log(arr);
2、选择排序
 1   var arr = [1,4,2,6,8,5,1,3,4];
 2   for(var i=0;i<arr.length-1;i++){
 3     for(var j=i+1;j<arr.length;j++){     
 4       if(arr[i]>arr[j]){                         
 5         var temp=arr[i]; 
 6         arr[i]=arr[j]; 
 7         arr[j]=temp; 
 8       } 
 9     } 
10   } 
11   console.log(arr);

 

 1   var arr=[1,4,2,6,8,5,1,3,4];
 2   var temp;
 3   for(var i=0;i<arr.length-1;i++){
 4     for(var j=arr.length-1;j>i;j--){
 5       if(arr[j]<arr[i]){
 6         temp=arr[i];
 7         arr[i]=arr[j];
 8         arr[j]=temp;
 9       }
10     }
11   }
12   console.log(arr);

 3、快速排序

 1 function quickSort(arr){
 2   var len=arr.length;//获取arr的长度
 3   if(len<=1){//如果arr的长度小于等于1则直接返回arr
 4     return arr;
 5   }
 6   var pIndex=Math.floor(len/2);//获取基准点
 7   var pivot=arr.splice(pIndex,1);//用splice方法获取基准点pivot=[arr[pIndex]],此时的arr为去除第pIndex项之后的剩余项;
 8   var left=[];
 9   var right=[];
10   for(var i=0; i<arr.length; i++){
11     if(arr[i]<pivot[0]){//如果小于基准点就放到数组l中
12       left.push(arr[i]);
13     }else{//如果大于等于基准点就放到右边数组中
14       right.push(arr[i]);
15     }
16   }
17   return quickSort(left).concat(pivot,quickSort(right));//递归不断重复整个过程
18 }

4、插入排序

 1 function insertSort(arr){
 2    var temp=null;//定义一个临时变量保存要插入元素的值
 3    for(var i=1; i<arr.length; i++){//从索引位置1开始遍历数组
 4       if(arr[i]<arr[i-1]){//只有要插入的元素小于已排好序的最大元素的时候才需要进行下面的操作
 5           temp=arr[i];//把要插入的元素赋给一个临时变量
 6           var p=i-1;//已排好序的数组的最后一项索引为i-1
 7           while(temp<arr[p] && p>=0){//如果要插入的元素小于已排好序的元素并且没有到已排好数组的开始位置
 8               arr[p+1]=arr[p];//把大于要插入元素(temp)的已排好序元素位置往后挪一位
 9               p--;//从后往前便利已经排好序的元素 
10           }
11           arr[p+1]=temp;//把要插入的元素插入到已排好序的数组中,索引位置为p+1
12       }        
13    }
14    return arr;//返回已排好序的数组
15}

 

#3快速排序es6改写

let quickSort = (arr) => {
            if(arr.length <= 1){
                return arr;
            }
            let sortIndex = Math.floor(arr.length/2),
                leftArr = [],
                rightArr = [],
                base = arr[sortIndex];
                arr.splice(sortIndex,1);
                //此处需要去除参照项,否则会出现Maximum call stack size exceeded 递归调用超出限制
                //简单写法 base = arr.splice(sortIndex,1)[0]
            for(let i = 0;i < arr.length;i++){
                if(arr[i] < base){
                    leftArr.push(arr[i])
                }else{
                    rightArr.push(arr[i])
                }
            }
             return quickSort(leftArr).concat(base,quickSort(rightArr))
        }
        
        let testArr = [2,31,1424,12,3445,1,2,3]
        let result = quickSort(testArr);

 

posted @ 2016-07-20 20:07  凉城丶旧梦  阅读(249)  评论(0编辑  收藏  举报