首页 > 试题广场 >

一个序列为(13,18,24,35,47,50,63,83,

[单选题]
一个序列为(13,18,24,35,47,50,63,83,90,115,124),如果利用二分法查找关键字为90的,则需要几次比较 ?
  • 1
  • 2
  • 3
  • 4
正确答案
B
答案解析
第一次查找,index=(left+right)/2=(0+11)/2=6,第一次与50比较,要查找的数90比50大,因此left=index+1,index=(7+11)/2=9,该位置上是90,第二次查找到
发表于 2018-09-09 16:57:39 回复(1)
public static int binarySearch(Integer[] srcArray, int des) {
    //定义初始最小、最大索引
    int low = 0;
    int high = srcArray.length - 1;
    //确保不会出现重复查找,越界
    while (low <= high) {
        //计算出中间索引值
        int middle = (high + low)>>>1 ;//防止溢出
        if (des == srcArray[middle]) {
            return middle;
        //判断下限
        } else if (des < srcArray[middle]) {
            high = middle - 1;
        //判断上限
        } else {
            low = middle + 1;
        }
    }
    //若没有,则返回-1
    return -1;
}
发表于 2018-09-05 10:57:41 回复(0)
不应该是三次吗?90与50,然后与83 然后与90

发表于 2018-07-26 17:10:04 回复(0)
先和第一个mid[(11+0)/2]=50比较,大于50,取start为mid+1,此时的mid【(5+1+11)/2=8】=90,两次找到
发表于 2018-08-26 22:07:24 回复(0)
不应该是4吗?
发表于 2018-08-14 23:52:41 回复(0)