順序查找:
順序查找也稱為線性查找,時間復雜度為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))