js 二分查找法之每日一更

Posted KG--work-space

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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>

 

以上是关于js 二分查找法之每日一更的主要内容,如果未能解决你的问题,请参考以下文章

分治法之二分查找

js 每日一更(数组转换成前端更容易解析的树状结构)

写代码---每日一题(二分查找)

每日一更1208

每日一更1203

每日算法— 二分查找