列表查找
输入:列表、待查找的元素
输出:元素下标(未找到元素时返回:None或者-1)
- 内置查找函数 list.index()
顺序查找
从列表的第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个为止
def linear_search(li,val):
for ind,v in rnumberate(li):
if v=val:
return ind
else:
return None
时间复杂度 O ( n ) O(n) O(n)
二分查找
在顺序排列的列表中直接查看中间数大小与所需数据进行比较
def binary_search(lst, val): # lst为从小到大排序
left = 0
right = len(lst)
while left <= right: # 候选区域有值
mid = (left+right)//2
if lst[mid] == val:
return mid
elif lst[mid] < val: # 待查找值在mid右侧
left = mid + 1
elif lst[mid] > val: # 待查找值在mid左侧
right = mid - 1
else:
return None
时间复杂度
O
(
log
n
)
O(\log n)
O(logn)
but 无序的列表不适合用二分查找,因为排序的时间复杂度在
O
(
n
2
)
O(n^{2})
O(n2) 和
O
(
n
)
O(n)
O(n) 之间