【单选】在含 1000 个互不相同元素的升序数组中,用二分法查找给定值(返回元素位置或报告不存在),最坏情况下需要与数组元素比较多少次( )。
二分查找的判定树是近似完全二叉树,最坏比较次数 = ⌊log₂n⌋ + 1;这里 n=1000,2^9 = 512 < 1000 ≤ 1024 = 2^10,所以是 10 次。
用 ⌈log₂n⌉ 算成 9(当 n 恰好是 2 的幂或接近时容易差 1);或凭感觉选 500(把二分当成线性查找)。
本题考查二分查找的比较次数与判定树高度。
二分查找每比较一次,候选区间长度约减半;若把查找过程画成一棵判定树(每个内部结点是一次比较),树高就是最坏比较次数。长度为 n 的判定树高度为:
最坏比较次数 = ⌊log₂ n⌋ + 1
n = 1000 时:2^9 = 512 < 1000 ≤ 1024 = 2^10,所以 ⌊log₂1000⌋ = 9,最坏比较次数 = 9 + 1 = 10,选 D。
以"查找不存在的元素"为最坏情形。每次比较把区间一分为二:
1000 → 500 → 250 → 125 → 62(含中点) → 31 → 15 → 7 → 3 → 1 →(区间为空,报告不存在)
区间长度序列中,只要长度 > 1 就必须继续比较,长度降到 1 时还要比较这最后 1 个元素才能判定: 1000 → 500 → 250 → 125 → 63 → 32 → 16 → 8 → 4 → 2 → 1 共 10 步;最后空区间再判一次即得出"不存在"。 按"每次比较后区间减半"统计,比较次数为 10 —— 与公式一致。