利用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 }
原文地址:https://www.cnblogs.com/3Lweb/p/5582728.html