jvascript 顺序查找和二分查找法

第一种:顺序查找法

中心思想:和数组中的值逐个比对!

    /*
     * 参数说明:
     * 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])

  1. 确定该期间的中间位置middle。
  2. 将查找的值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); 

原文地址:https://www.cnblogs.com/zhangans/p/4831831.html