第一种:顺序查找法
中心思想:和数组中的值逐个比对!
/* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,findVal){ var temp = false; //控制开关 for(var i =0;i<array.length;i++){ if(array[i] == findVal){ //逐个匹配是否相等 temp = true; //如果找到,temp设置为true; return i; //返回在数组的位置 } } if(!temp){ //如果没有找到 return '没找到'; } } //调用: var arr = [5,7,66,78,99,103,126,203,1]; document.write(Orderseach(arr,103)); //总结:很简单的代码,大神请忽视~~~
第二种:二分查找法
主要思想是:(设查找的数组区间为array[left, right])
- 确定该期间的中间位置middle。
- 将查找的值findVal与array[middle]比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。
注意: 使用二分查找的数组必须是有序的
二分法查找 ---递归
//二分法查找 ---递归 function binarySeach(array,findVal,left,rigth){ var middle = Math.round((left + rigth) / 2); //确定中间的那个数 if(left > rigth){ //如果左边的数大于右边的数,证明没有找到数 document.write('找不到'); return; }; if(findVal > array[middle]){ //像右查找 binarySeach(array,findVal,middle +1,rigth); }else if(findVal < array[middle]){ //像左查找 binarySeach(array,findVal,left,middle -1); }else{//显示 document.write(middle); } };
调用:
binarySeach(arr,204,0,arr.length -1);
二分法查找 ---函数循环
//二分法查找 -- 循环 function binarySeach1(array,findVal){ var left = 0; //数组从下标为0开始 var right = array.length -1; //数组结束 while(left <= right){ //左边不能大于右边 var middle = Math.round((left + right)/2); //取中间 if(findVal == array[middle] ){ // return middle; }else if(findVal < array[middle] ){//像左查找 right = middle - 1; }else if(findVal > array[middle]){//像右查找 left = middle + 1; } } return '找不到'; };
调用:
binarySeach1(arr,104);