Python查找算法

顺序查找法

从n个元素中查找x的值是否存在,从头到尾逐个查找
最好情况————第1项就是要找的数据对象,只有一次比较
最差情况————需要n次比较,全部比较完后,查不到数据
平均情况————比较次数为n/2次
算法的时间复杂度为O(n)

def sequentialSearch(alist, item):
    pos=0   #初始查找位置
    found=False   #未找到数据对象
    while pos

二分查找法

用于预排序列表的查找
将列表a中间位置的项与查找关键字t比较:
如果相等,则查找成功;
如果中间项大于t,则查找前一半子表;
如果中间项小于t,则查找后一半子表
重复以上过程,直到找到满足条件的记录,即查找成功;或子表不存在,即查找失败
算法的时间复杂度为O(logN),N是列表长度

def _binarySearch(key,a,lo,hi):   #递归实现
    if hi<=lo:
        return -1   #子表不存在,查找失败
    mid=(lo+hi)//2   #计算中间位置
    if a[mid]>key:
        return _binarySearch(key,a,lo,mid)
    elif a[mid]
def binarySearch(key,a):   #非递归实现
    low=0
    high=len(a)-1
    while low<=high:
        mid=(low+high)//2
        if a[mid]key:
            high=mid-1
        else:
            return mid   #找到后返回key在a里的位置索引
    return 'Not found'
    
#test:
alist=[1,3,8,17,29,32]
print binarySearch(3,alist)
#Output:1

你可能感兴趣的:(数据结构与算法)