查找算法: 顺序查找 和 二分查找

顺序查找:

  顺序查找也称为线性查找,时间复杂度为O(n),基本思想是从头遍历数据,直到遍历的数据和查找的数据一致。

  python列表中的index方法,也是顺序查找的一种。

 

二分查找:

  进行二分查找的前提是:列表是有序的;时间复杂度:O(logn)

  基本思想,将待查找的值与列表中间的元素对比,然后更新列表的左或者右边界.重复直到找到该元素或者遍历全部元素.

 

如何选择顺序查找还是二分查找:

  1.如果列表是有序的,优先二分查找

  2.如果列表是无序的,分2种情况:

    a. 查找次数较少,使用顺序查找

    b. 查找次数较多,先对列表进行排序,再使用二分查找

 

顺序查找代码:

def serial_find(li, item):
    '''顺序查找
    '''
    for i in range(len(li)):
        if li[i] == item:  # 列表的li[i],时间复杂度为O(1).
            return i 
    return None 


print(serial_find([1,2,3,4,5,6,7,8], 3))

 

二分查找:

def binary_search(list, item):
    low = 0
    high = len(list) - 1
    
    while low <= high:
        mid = int((low + high) / 2)
        guess = list[mid]
        if guess == item:
            return mid
        if guess > item:
            high = mid - 1
        else:
            low = mid + 1
    return None

my_list = [1, 3, 5, 7, 9]
print(binary_search(my_list, 3))

 

posted @ 2020-11-26 17:01  遗世独立的愚公  阅读(1427)  评论(0编辑  收藏  举报