zoukankan      html  css  js  c++  java
  • 利用js来实现一些常用的算法

    示例代码中的arr指的是给出的数组,s指的是数组的起始坐标0,end指的是数组的最后一个坐标arr.length-1,n指的是要查找的数字

    查找某个值:

    1.线性法

    1 function findInArr(arr,item){
    2     for(var i=0;i<arr.length;i++){
    3         if(arr[i]==item){
    4             return true;
    5         }
    6     }
    7     return false;
    8 }

    2.二分法

     1 function findInArr(n,s,e){
     2             //n为查找数字,s为起始位置下标0,e为结束为止下标arr.length-1
    3 if(s>e){ 4 return fasle; 5 }else if(s==e){ 6 if(arr[s]==n){ 7 return true; 8 }else{ 9 return false; 10 } 11 } 12 //这里的数组arr是已经从小到大排过序的数组 13 var c=Math.floor((s+e)/2); 14 if(arr[c]==n){ 15 return true; 16 }else{ 17 if(n<arr[c]){ 18 return findInArr(n,s,c); 19 }else{ 20 return findInArr(n,c+1,e); 21 } 22 } 23 }

    查找最小值:

     1     var arr=[1,28,47,53,68,108,200];
     2         function findMin(s,e){
     3             //s,e为数组下标start,end
     4             if(s>e){
     5                 return null;
     6             }else if(s==e){
     7                 return arr[s];
     8             }else if(s==e-1){
     9                 if(arr[s]<arr[e]){
    10                     return arr[s];
    11                 }else{
    12                     return arr[e];
    13                 }
    14             }
    15             var c=Math.floor((s+e)/2);
    16             var l=findMin(s,c);
    17             var r=findMin(c+1,e);
    18             if(l<r){
    19                 return l;
    20             }else{
    21                 return r;
    22             }
    23         }

     去重:

     1 function findInArr(arr,n){
     2             for(var i=0;i<arr.length;i++){
     3                 if(arr[i]==n){
     4                     return true;
     5                 }
     6             }
     7             return false;
     8         }
     9         function removeDup(arr,s,e){
    10             if(s>e){
    11                 return [];
    12             }else if(s==e){
    13                 return [arr[s]];
    14             }
    15             var c=Math.floor((s+e)/2);
    16             var l=removeDup(arr,s,c);
    17             var r=removeDup(arr,c+1,e);
    18             while(r.length){
    19                 if(findInArr(l,r[0])){
    20                     r.shift();
    21                 }else{
    22                     l.push(r.shift());
    23                 }
    24             }
    25             return l;
    26         }

     排序:

    1.二分法

     1 function mySort(arr,s,e){
     2             if(s>e){
     3                 return [];
     4             }else if(s==e){
     5                 return [arr[s]];
     6             }else if(s=e-1){
     7                 if(arr[s]<arr[e]){
     8                     return [arr[s],arr[e]];
     9                 }else{
    10                     return [arr[e],arr[s]];
    11                 }
    12             }
    13             var c=Math.floor((s+e)/2);
    14             var l=mySort(arr,s,c);
    15             var r=mySort(arr,c+1,e);
    16             var aResult=[];
    17             while(l.length||r.length){
    18                 if(l[0]<right[0]){
    19                     aResult.push(l.shift());
    20                 }else{
    21                     aResult.push(r.shift());
    22                 }
    23                 if(l.length==0){
    24                     aResult=aResult.concat(r);
    25                     break;
    26                 }else if(r.length==0){
    27                     aResult=aResult.concat(l);
    28                     break;
    29                 }
    30             }
    31             return aResult;
    32         }

     2.冒泡排序

     1 function bubbleSort(arr){
     2     for(var i=0;i<arr.length;i++){
     3         for(var j=0;j<arr.length;j++){
     4             if(arr[j+1]<arr[j]){
     5                 var c = arr[j+1];
     6                 arr[j+1] = arr[j];
     7                 arr[j] = c;
     8             }
     9         }
    10     }
    11     return arr;
    12 }

    3.选择排序

     1 function findArr(arr,start){
     2     var iMin = arr[start];
     3     var iMinIndex = start;
     4     for(var i=start;i<arr.lengthli++){
     5         if(arr[i]<iMin){
     6             iMin=arr[i];
     7             iMinIndex=i;
     8         }
     9     }
    10     return iMinIndex;
    11 }
    12 function selectionSort(arr){
    13     for(var i=0;i<arr.length;i++){
    14         var index=findMin(arr,i);
    15         var c;
    16         c=arr[index];
    17         arr[index]=arr[i];
    18         arr[i]=c;
    19     }
    20     return arr;
    21 }

    4.归并排序

     1 function mergeSort(arr,s,e){
     2     if(s>e){
     3         return [];
     4     }else if(s==e){
     5         return [arr[s]];
     6     }else if(s==e-1){
     7         if(arr[s]<arr[e]){
     8             return [arr[s],arr[e]];
     9         }else{
    10             return [arr[e],arr[s]];
    11         }
    12     }
    13     var c = Math.floor((s+e)/2);
    14     var left = mergeSort(arr,s,c);
    15     var right = mergeSort(arr,c+1,e);
    16     var aResult = [];
    17     while(left.length||right.length){
    18         if(left[0]<right[0]){
    19             aResult.push(left.shift());
    20         }else{
    21             aResult.push(right.shift());
    22         }
    23         if(left.length==0){
    24             aResult = aResult.concat(right);
    25             break;
    26         }else if(right.length==0){
    27             aResult = aResult.concat(left);
    28             break;
    29         }
    30     }
    31     return aResult;
    32 }

    5.快速排序

     1 function quickSort(arr,s,e){
     2     if(arr.length==0){
     3         return [];
     4     }
     5     var n = Math.floor((s+e)/2);
     6     var c = arr.splice(n,1);
     7     var left = [];
     8     var right = [];
     9     for(var i=0;i<arr.length;i++){
    10         if(arr[i]<c[0]){
    11             left.push(arr[i]);
    12         }else{
    13             right.push(arr[i]);
    14         }
    15     }
    16     return quickSort(left,0,left.length-1).concat(c,quickSort(right,0,right.length-1))
    17 }
  • 相关阅读:
    python函数练习题2
    python函数练习题1
    数字是否是10的整数倍
    关于循环的作业:登陆程序
    用for循环写这段代码
    while循环语句
    在CentOS8 上安装Python3
    时隔半年再写购物车程序并改进
    vue上传
    根据生日计算年龄
  • 原文地址:https://www.cnblogs.com/3Lweb/p/5582728.html
Copyright © 2011-2022 走看看