首页 > 试题广场 >

若有18个元素的有序表存放在一维数组A[19]中,第一个元素

[单选题]

若有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进行二分查找,则查找A[3]的比较序列的下标依次为()

  • 1,2,3
  • 9,5,2,3
  • 9,5,3
  • 9,4,2,3
推荐
答案选D
采用公式:mid = left + ((right - left) >> 1)
虽然和mid = (left + right) / 2具有一样的效果,
此公式的好处:1.防溢出 2.移位 比 除法 效率更高
第一次:1 - 18 , mid = 9 , 9 > 3.所以答案应该在mid 的左边
第二次: 1 - 8,     mid = 4,  4 > 3, 所以答案应该在mid 的左边
第三次: 1 - 3,    mid = 2 ,  2 < 3, 所以答案应该在mid 的右边
第四次: 3 - 3, mid = 3,  3 = 3, 所以查找完毕
所以查找的下标依次为 9, 4, 2, 3 选D
编辑于 2019-10-28 14:30:25 回复(0)
C
1. 1~18  (1+18)/2=9  3<9
2. 1~9    (1+9)/2=5    3<5
3. 1~5    (1+5)/2=3    3=3
9 -> 5 -> 3
发表于 2019-10-27 11:22:16 回复(0)
选D:
第一次:1--18:(1+18)/2=9    (取整)
第二次:1--8:(1+8)/2=4    
第三次:1--3:(1+3)/2=2
第四次:3--3:(3+3)/2=3    查找成功
发表于 2019-10-27 17:27:55 回复(0)
选C;
num=3;
und=1; up=18;
mid=(und+up)>>1;
cout<<mid<<" ";
while(mid!=num)
{
if(mid>num){up=mid; mid=(und+up)>>1;}
if(mid<num){und=mid;mid=(nud+up)>>1;
cout<<mid<<" "                //  输出即为下标
}}

发表于 2019-10-27 08:38:26 回复(0)
我选D不知道这样分析是哪里错了
发表于 2019-10-26 17:56:56 回复(3)
C。根据题目从A[1]-A[18]中进行二分查找。
  1. 取中间A[9]
  2. A[1]-a[9]取中间A[5]
  3. A[1]-A[5]取中间A[3]
发表于 2019-10-25 20:03:01 回复(0)
D
发表于 2020-04-10 15:44:30 回复(0)
D 教材源代码
发表于 2020-03-29 16:11:39 回复(0)
第一次:min=1;max=18;mid=9
第二次:min=1;max=8;mid=4
第三次:min=1;max=3;mid=2
第四次:min=3;max=3;结果为3
发表于 2019-10-28 11:27:39 回复(0)
就是max = mid 还是 max = mid - 1的问题,我认为还是max = mid - 1;
发表于 2019-10-27 22:07:50 回复(0)
感觉选C
第一次 比较9 第二次比较5 第三次比较3
发表于 2019-10-26 09:56:12 回复(0)
72%头像 72%
选c
发表于 2019-10-26 08:30:42 回复(0)
我觉得选C
区间下标在1-18,二分查找 (1 + 18) / 2  = 9 --> (1 + 9) / 2 = 5 --> (1 + 5) / 2 = 3
发表于 2019-10-25 18:43:48 回复(0)