示例代码中的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 }