什么叫查找
查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程 列表查找(线性表查找):从列表中查找指定元素 输入:列表、待查找元素 输出:元素下表(未找到元素时一般返回None或-1) 内置列表查找函数:index() 顺序查找(Linea Search) 顺序查找:也叫作线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止
1.顺序查找(Linea Search)
#顺序查找代码
def linear_search(li, val):
for index, value in enumerate(li):
if value == val:
return index
else:
return None
时间复杂度为O(n)
顺序查找是把列表从头到尾查找一遍,最多找n次
2.二分查找(Binary Search)
#二分查找需要事先排序
def binary_search(li, val):
left = 0
right = len(li) - 1
while left <= right: #候选区有值
mid = (left + right) // 2
if li[mid] == val:
return mid
elif li[mid] > val: #待查找的值在mid左侧
right = mid - 1
else: #li[mid]<val 待查找的值在mid右边侧
left = mid + 1
else:
return None
li = [1,2,3,4,5,6,7,8,9]
print(binary_search(li, 3))
二分查找的复杂度O(logn)
补充
列表的内置函数index()实现的是线性查找方式,二分查找要求列表必须是有序列表,二分查找速度快,但是必须排序。排序的时间复杂度大于O(n)。
需要查找时,若实现有序则优先使用二分查找,无序则要考虑排序。若排序后查找次数很少,则不如使用线性查找(因为要考虑排序时间),但是若要多次使用查找,则可以先排序。