python - 如何返回 Python 数组中目标元素的索引?

标签 python algorithm binary-search

目前,当我搜索位于中点的元素时,它返回正确的索引,但对于任何其他元素,它对我不起作用。

我认为我在拆分数组时犯了一个错误:

    aList = [1,3,5,6,8,9,10,12,34,56,78,456]
    def recursiveBinarySearch(aList, target):
        #aList = sorted(aList)
        
        if len(aList) == 0:
            return False
        else:
            midpoint = len(aList) // 2
            if aList[midpoint] == target:
                return aList.index(target)
            else:
                if target < aList[midpoint]:
                    return recursiveBinarySearch(aList[:midpoint],target)
                else:
                    return recursiveBinarySearch(aList[midpoint+1:],target)
    
    print(recursiveBinarySearch(aList,9))

最佳答案

那是因为每次你进行递归调用时,都会传递一个不同的修改列表,并且索引会在每次调用中发生变化。比如你在数组的后半部分查找一个数,最终返回的值会小于len(aList)/2,因为下一个只会传递这部分数组迭代。

解决方法是传递列表的 startend 点,而不是拆分列表。

aList = [1,3,5,6,8,9,10,12,34,56,78,456]
def recursiveBinarySearch(aList, target, start, end):
    #aList = sorted(aList)

    if end-start+1 <= 0:
        return False
    else:
        midpoint = start + (end - start) // 2
        if aList[midpoint] == target:
            return midpoint
        else:
            if target < aList[midpoint]:
                return recursiveBinarySearch(aList, target, start, midpoint-1)
            else:
                return recursiveBinarySearch(aList ,target, midpoint+1, end)

print(recursiveBinarySearch(aList,455, 0, len(aList)))

关于python - 如何返回 Python 数组中目标元素的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42205011/

相关文章:

python - 在 Python 中,使用二分法在字典列表中查找项目

java - 使用二分查找方法查找项目的索引

python - Anaconda 提示 "Failed to create temp directory ' C :\temp\conda-<RANDOM>\' " error

c - GCC-4.3.2 中提供的标准算法

algorithm - 如何在 p 个处理器上分配一个包含 n 个元素的向量

c - 数组的最小和分区

c++ - 在 C/C++ 中使用二进制搜索在日志文件中搜索日期时间

python - 将 dockerfile 从目录配置为 'read'?

python - 如何在多个文件上运行 python 脚本以获得多个输出文件?

python - 为什么在 python 中使用 getter/setter