• 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);
  • 相关阅读:
    JS防止刷新,后退,关闭
    IIS日志-网站运维的好帮手
    未能加载文件或程序集“XXX”或它的某一个依赖项。磁盘空间不足---解决方案
    NOPI导出标准格式Excel
    DRBD+Heartbeat+Mysql高可用环境部署
    LVS三种包转发模型调度算法
    nagios环境部署(rhel6.5)
    关于nagios监控
    关于memcached原理及安装部署
    PHP5.4.36 RHEL6.5 源码编译安装
  • 原文地址:https://www.cnblogs.com/lcddjm/p/5666205.html
Copyright © 2020-2023  润新知