我正在尝试实现一个跳转搜索算法。然而,在下面的这个例子中,我找不到72这个数字,尽管它在我定义的列表中很清楚。这是代码,有人能给我解释一下为什么剩下的数字可以返回,而不是列表中索引0处的72吗?你知道吗
def jumpSearch(list, number, constant) :
i = 0
counter = 0
while (list[i] < number and i + constant < len(list) and list[i + constant] < number) :
i = i + constant
for j in range (i, i + constant, 1) :
if (list[j] == number) :
return list[j]
return None
mylist = [72, 56, 93, 8, 22, 41, 88, 23, 60]
mylist.sort()
print(jumpSearch(mylist, 72, 3))
我在网上看到过其他的例子,但是,我真的很想测试一下自己的能力,从零开始编写代码和逻辑,以便得到结果。你知道吗
因此,我对跳转搜索的初步理解使我无法知道这是否是跳转搜索的“正确”方法。对代码的任何评估或改进,甚至是编写跳转搜索的“最佳和正确”方法的示例,对我的学习都是有价值的!你知道吗
如果您查看
while
循环,您将看到当list[i + constant]
不再小于72时会发生什么:当
list[i + constant]
较小时递增,而不是相等或较大时递增。你知道吗所以我们知道这个值在} documentation :
list[i]
和list[i + constant]
之间。但是,range()
产生的数字独占结束值。从^{(我的粗体强调)。你知道吗
所以你有一个错误。由
range()
产生的最后一个值是i + constant - 1
,而72
则位于i + constant
。你知道吗您需要在结束值中添加一个,然后在
range(i, i + constant + 1)
中搜索:我为您的函数添加了一些调试输出,以便您可以看到发生了什么:
可以看到while循环只执行一次。while循环的第二行输出显示
mylist[3+3]
等于number
,while循环的下一次迭代测试mylist[6] < number
,这是false。因此,执行跳转到for循环,并且输出显示for循环从未找到等于72的mylist[j]
72的索引正好是其中一个步骤的(在您的例子中是6,步骤是3),您错过了它,因为您使用了
<
而不是<=
符号。你知道吗将
list[i + constant] < number
更改为list[i + constant] <= number
。你知道吗相关问题 更多 >
编程相关推荐