二进制搜索似乎返回随机结果



在开始之前,我不会询问二进制搜索,也不会询问如何解决这个问题
我的问题是:
为什么我得到了奇怪的结果。到底是什么导致了这些结果
下面是:
我正在尝试编写一个算法来搜索有序的单词列表。唯一的问题是,词汇排序列表从字母表中间的某个地方开始,我需要找到旋转点("最小"单词的索引(。为了解决这个问题,我决定先搜索最大的单词,它总是在最小的单词之前,然后我会担心索引
我做到了
但后来我开始注意到奇怪的结果,有点偏离了方向
我正在使用在线翻译,不知怎么的,我得到了看似随机的结果。我得到了zi、yi、xi、wi、vo,有时还有d
以下是我的列表:
words = list({'vo', 'wi', 'xi', 'yi', 'zi', 'ai', 'bi', 'ci', 'd'})

这是我的代码看起来像

low = 0
high = len(words)
mid = (high-low) // 2 + low
biggest_word = words[0]
while high-low > 1:
if words[mid] > biggest_word:
biggest_word = words[mid]
high = mid
else:
low = mid
mid = (high-low) // 2 + low
print (biggest_word)

更新:我发现这个问题只发生在Python3中。Python 2会产生一致的结果。

语法list({'vo', 'wi', 'xi', 'yi', 'zi', 'ai', 'bi', 'ci', 'd'})首先创建一个集合,然后从该集合生成一个列表。集合是一个无序的数据结构,因此列表中的顺序是随机的。似乎在python 2中,一个集合仍然保持插入顺序,但python 3却没有。

最新更新