已知一长度为17的有序表A[1…17],利用折半查找进行查找时,查找元素A[3]所需进行比较的元素次序依次为:( )
A.A[9]–>A[4]–>A[2]–>A[3] B.A[8]–>A[4]–>A[2]–>A[3] C.A[9]–>A[5]–>A[3] D.A[9]–>A[5]–>A[2]–>A[3]
初始化:
left = 1
right = 17
第一次比较:
计算中间位置 mid = [(left + right) / 2] = [(1 + 17)/2] = 9
mid = [(left + right) / 2] = [(1 + 17)/2] = 9
比较 A[9] 和 A[3]
A[9]
A[3]
A[9] 大于 A[3],更新右边界 right = mid - 1 = 8
right = mid - 1 = 8
第二次比较:
mid = [(left + right) / 2] = [(1 + 8) / 2] = 4
A[4]
right = mid - 1 = 3
第三次比较:
mid = [(left + right) / 2] = [(1 + 3) / 2] = 2
A[2]
left = mid + 1 = 3
第四次比较:
mid = [(left + right) / 2] = [(3 + 3) / 2] = 3
故而,查找元素A[3]所需进行比较的元素次序依次为:A[9]–>A[4]–>A[2]–>A[3]。
c应该也是对的,mid向上取整就是c,向下取整就是a
2484492098 回复 ojw: 不会吧,怎么可能有两个答案呢?
zhangbou 回复 2484492098: c是对的
A
用户登录可进行刷题及查看答案
登录后提交答案