目录

1.顺序查找法

例题:在顺序表中查找特定数值。

例2:在列表中顺序查找最大值和最小值。

2.二分查找法

例3:二分查找法的递归实现。

例4:二分查找法的非递归实现

3.Python提供的查找算法。


1.顺序查找法

        查找算法是在程序设计中最常用到的算法。假定要从n个元素中查找x的值是否存在,从头到尾逐个查找,这种方法称为顺序查找法。

        顺序查找法有三种情况可能发生:在最好的情况下,第一项就是要找的数据结构,只有一次比较;在最差的情况下,需要n次比较,其全部比较完之后查不到数据;在平均情况下,比较次数为n/2次。算法的时间复杂度为O(n)。

例题:在顺序表中查找特定数值。

def sequentialSearch(alist,item):
    pos=0                     #初始位置
    found=False               #未找到数据对象
    #循环条件
    while pos<len(alist)and not found:
        if alist[pos]==item:
            found =True
        else:
            pos =pos+1
    return found
testlist=[1,3,33,8,37,29,32,15,5]
print(sequentialSearch(testlist,3))
print(sequentialSearch(testlist,13))

例2:在列表中顺序查找最大值和最小值。

def max1(alist):
    pos=0
    iMax=alist[0]     #假设第一个值最大
    while pos<len(alist):
        if alist[pos]>iMax:
            iMax=alist[pos]     #赋值
        pos=pos+1
    return iMax
def min1(alist):
    iMin=alist[0]
    for item in alist:
        if item<iMin:
            iMin=item
    return iMin

testlist=[1,3,33,8,37,29,32,15,5]
print("max=",max1(testlist))
print("min=",min1(testlist))

2.二分查找法

二分查找法又称折半查找法,用于预排序列表的查找方法。

        如果要在排序列表alist中查找元素t,首先将列表alist中间位置的项域查找关键字t比较,如果两者相等,则查找成功;否则利用中间项将列表分成前、后两个子表,如果中间位置项目大于t,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,即查找成功;或者直到子表不存在为止,即查找不成功。

        对于包含N个元素的表,其时间复杂度为O(log2^N)。

例3:二分查找法的递归实现。

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]<key:
        return _binarySearch(key,a,mid+1,hi)   #递归查找中间位置的后面的子表
    else:
        return mid                             #等于则返回中间位置
def binarySearch(key,a):
    return _binarySearch(key,a,0,len(a))
a=[1,13,26,33,45,55,68,72,83,99]
print(binarySearch(99,a))
print(binarySearch(2,a))

例4:二分查找法的非递归实现

def binarySearch(key,a):
    low = 0                                    #设置最小边界
    high = len(a) - 1                          #设置最大边界
    while low <= high:                         #左边界小于等于右边界,则循环
        mid = (low + high) // 2
        if a[mid]<key:                         #中间位置小于查找值
            low=mid+1                          #调整最小边界
        elif a[mid]>key:                       #中间位置大于查找值
            high=mid-1                         #调整最大边界
        else:
            return mid
    return -1
a=[1,13,26,33,45,55,68,72,83,99]
print(binarySearch(99,a))
print(binarySearch(2,a))

3.Python提供的查找算法。

Python提供了下列的查找算法:

(1)运算符in:“x in list”测试x是否存在于list中

(2)内置函数max()、min():查找列表中的最大值和最小值。

更方便的使用查找算法。

x=list(map(int,input().split()))
print(3 in x)
print(max(x),min(x))