顺序查找:
顺序查找也称为线性查找,时间复杂度为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))