二分查找demo

<!DOCTYPE html>
<html>
<head>
    <title>二分查找法实现</title>
</head>
<body>
<script type="text/javascript">
    var log = console.log.bind(console)
    function binareSearch(arr,v){
        if(arr == null || arr.length <= 0){
            return -1;
        }
        var low = 0,high = arr.length-1;
        var mid;
        while(low <= high)//此处注意是小于等于,不能写小于(小于在特殊情况下会出现错误)
        {
            mid = low + ((high-low)>>1);//此处使用的是右移符号,而没有使用/2,因为在js当中整数除以整数会得到小数,小于传进数组当做索引,程序不会报错,只会返回undefined,执行下面的比较时,小于和大于都不满足,会直接返回mid
            //mid = (low+hight)>>1//这种写法虽然数学上是一样的,但在程序中是不一样的,因为low+hight可能会溢出,因此使用上面的写法更为稳妥
            if(arr[mid] < v){
                low = mid + 1;
            }else if(arr[mid] > v){
                high = mid -1;
            }else{
                return mid;
            }
        }
        return -1;
    }
    //测试
    var arr = [];
    for(var i = 0;i<1000;i++){
        arr[i] = i;
    }
    log("25 ->"+binareSearch(arr,25));
    log("-100 ->"+binareSearch(arr,-100));
    log("1000 ->"+binareSearch(arr,1000));
    log("28 ->"+binareSearch(arr,28));
    log("500 ->"+binareSearch(arr,500));
    log("50 ->"+binareSearch(arr,50));
</script>
</body>
</html>

 

posted @ 2018-12-11 15:27  小伙子学编程  阅读(156)  评论(0)    收藏  举报