二进制搜索适用于已排序的条目 . 根据算法,如果条目数(n)是偶数,则它首先搜索第n / 2条目 . 如果是密钥,则返回,否则检查密钥是否小于或大于位置的n / 2 . 如果它更小,那么搜索从索引1继续到n / 2 -1,丢弃剩下的一半 . 类似地,该过程重复直到找到搜索到的密钥 . 在奇数个条目的情况下,中间位置是n-1/2 .
所以我的问题是,如果有重复的条目,我们按升序排序,如11122233.现在,如果我们读取表二进制搜索键= 1(请忽略语法),然后根据算法,n / 2 = 4但是第4个位置不是1,所以搜索从1位继续到第4位 . 现在,n / 2 =第二个位置,它是1,它是关键 . 所以搜索在第二个索引处停止 . 所以返回第二个索引 .
但是在读取表二进制搜索的第一个条目1中,即返回索引1 . 为什么这样?请解释 .
1 回答
因为算法has been specified and implemented that way:
这背后的基本原理是您希望语言表现出稳定的行为 - 在表的末尾添加一些完全不相关的条目不应该改变
READ TABLE
语句所定位的内容 .