Python 排序顺序搜索

Python 排序顺序搜索,python,sequential,Python,Sequential,您好,这里的目标是改进使用顺序搜索在列表中查找元素所需的步骤数 所以我有一个未排序的列表numbers=[5,2,1,0,3],我试图找到元素3。找到它需要5个步骤 我在这里的任务是创建一个名为sortedSequentialSearch()的新函数,它以升序接收排序列表,并对其进行改进,以减少查找元素3所需的步骤 以下是我的常规顺序搜索代码: def sequentialSearch(theValues, target): n = len(theValues) count =

您好,这里的目标是改进使用
顺序搜索在列表中查找元素所需的步骤数

所以我有一个未排序的列表
numbers=[5,2,1,0,3]
,我试图找到元素
3
。找到它需要
5个步骤

我在这里的任务是创建一个名为
sortedSequentialSearch()
的新函数,它以升序接收排序列表,并对其进行改进,以减少查找元素
3
所需的步骤

以下是我的常规顺序搜索代码:

def sequentialSearch(theValues, target):
    n = len(theValues)
    count = 0 

    for i in range(n):
        count = count + 1
        if theValues[i] == target:
            print(f"Found, {count} steps needed")
            return True
    return False

如果让我传入
numbers.sort()
,我如何改进这一点?

在对数组进行排序后,可以使用二进制搜索。它具有对数(n)时间复杂度

在本例中为2.3步,这比3步好


搜索排序数组的一种有效方法是二进制搜索。我修改了您的代码以使用它:

def二进制搜索(值、目标、下限、上限):
中间=(上界+下界)//2
如果值[中间]==目标:
返回真值
elif上限值[中间]:
返回二进制搜索(值,目标,中间+1,上限)
其他:
返回二进制搜索(值,目标,下界,中间-1)

另一个选择是。如果数字均匀分布,则此算法比二进制搜索更有效,平均
log(log(n))
time。但最坏的情况并不是这样,因为如果数字按指数变化,可能需要花费时间。

您可以尝试二进制搜索。它将把搜索时间缩短到
log(n)