js 二分查找法之每日一更

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html"/>
        <meta name="keywords" content="二分查找算法" />
        <meta name="description" content="二分查找算法" />
        <meta name="author" content="KG" />
        <meta charset="utf-8">
        <title>二分查找算法</title>
    </head>
    <body>
        <!-- 二分查找算法是一种高效的搜索算法,是一种可以在有序数组中搜索到特定的元素的算法 -->
        <!-- 二分查找法一般有俩方法,使用递归或不使用递归 -->
        <script>
            // 进行二分查找法必须是排序好的数组
            var data=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
            var targetNum=8;
            let start=0,
            end=data.length-1,//因为是计算index值,数组中最大的index是数组长度减1
            midIndex;
            function findNum(start,end,targetNum){
                midIndex=Math.ceil((start+end)/2)
                
                // 获取数组的中间值
                if(targetNum==data[midIndex]){
                    return '查找到的目标是:'+data[midIndex]+','+'该目标在数组中的索引值是:'+midIndex;
                }else if(targetNum>data[midIndex]){//此条件成立的话,说明,查找目标在数组的后半部分,所以应该改变查找的开始位置start的值
                    start=midIndex+1;//因为targetNum不等于数组中间位置的值,所以可以把开始位置往比中间位置往后移动一位,查找的结束位置不变;
                    return findNum(start,end,targetNum);//继续缩小范围搜索
                }else if(targetNum<data[midIndex]){//此条件成立的话,说明,查找目标在筛选范围的前半部分,应该改变查找位置的end的值
                    end=midIndex-1; //因为targetNum不等于搜索范围的中间值,所以把搜索范围的结束位置往前移动一位,查找的开始位置不变;
                    return findNum(start,end,targetNum);
                }else{
                    return '该目标在数组内查找不到!请重新输入';
                }
            } 
            console.log(findNum(start,end,targetNum))
        </script>
    </body>
</html>

猜你喜欢

转载自www.cnblogs.com/nimon-hugo/p/12690802.html