顺序查找和二分法
顺序查找
顺序查找:也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表的最后一个元素为止,简单理解就是从头走到尾
def liner_search(lst,val): for i,v in enumerate(lst): if v == val: return i else: return None
二分查找
二分查找:又叫折半查找,从有序列表的初始候选区开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半.

mid = (left + right)//2, 然后用mid 和 查找的元素进行比较,如果mid比查找的元素大,说明要查找的元素在左半区,此时右半区不用管了,让right移动到4这个位置(mid - 1),然后在计算新的mid = (left + right)/2,

此时发现mid比查找的元素小,此时要移动我的left(mid + 1) , 5//2=2,整除没有余数,此时mid == 查找的数,输出它,
当left>right表示候选区没有值了,只有left<right时,候选有值,left=right时候选区有一个值

代码示例
import time lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] # 如果无序列表最好先排序(升序) def binary_search(lst, val): left = 0 right = len(lst) - 1 while left <= right: # 说明候选区有值 mid = (left + right) // 2 # mid值会根据left和right值变化而变化 if lst[mid] == val: return mid # 返回下标 elif lst[mid] > val: # 代表目标值在mid的左边 right = mid - 1 elif lst[mid] < val: # 代表目标值在mid的右边 left = mid + 1 else: # 如果找不到 return None start = time.time() ret = binary_search(lst, 11) print(time.time() - start) print(ret)
幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。

浙公网安备 33010602011771号