折半查找有序表[1](4,6,10,12,20,30,50,70,88,100)。若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。A.20、70、30、50B.30、88、70、50C.20、50D.30、88、50
折半查找有序表[1](4,6,10,12,20,30,50,70,88,100)。若查找表中元素58,则它将依次与表中()比较大小,查找结果是失败。
A.20、70、30、50
B.30、88、70、50
C.20、50
D.30、88、50
题目解答
答案
在折半查找中,每次都选择有序表的中间元素与目标元素进行比较。根据这个思路,我们可以针对题目给出的有序表和目标元素58进行分析。
首先,初始化查找范围的起始位置start为0,终止位置end为有序表的长度-1。
第一次比较:计算中间位置mid = (start + end) / 2 = (0 + 9) / 2 = 4。比较有序表中索引为4的元素20与目标元素58的大小。
20 < 58,目标元素在有序表的后半部分。
第二次比较:更新起始位置start = mid + 1 = 4 + 1 = 5,保持终止位置end不变。
第二次比较的时候,查找范围缩小到索引5到索引9之间。
计算中间位置mid = (start + end) / 2 = (5 + 9) / 2 = 7。比较有序表中索引为7的元素70与目标元素58的大小。
70 > 58,目标元素在有序表的前半部分。
第三次比较:更新终止位置end = mid - 1 = 7 - 1 = 6,保持起始位置start不变。
第三次比较的时候,查找范围缩小到索引5到索引6之间。
计算中间位置mid = (start + end) / 2 = (5 + 6) / 2 = 5。比较有序表中索引为5的元素30与目标元素58的大小。
30 < 58,目标元素在有序表的后半部分。
第四次比较:更新起始位置start = mid + 1 = 5 + 1 = 6,保持终止位置end不变。
第四次比较的时候,查找范围缩小到索引6到索引6之间。
计算中间位置mid = (start + end) / 2 = (6 + 6) / 2 = 6。比较有序表中索引为6的元素50与目标元素58的大小。
50 < 58,目标元素在有序表的后半部分。
最后,查找范围缩小到索引7到索引6之间,即没有元素需要再次比较,查找结果失败。
故本题选D。