二分查找
- 必须为有序列表,事件复杂度为 O(logn) :log以2为底
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:
right = mid - 1
else:
left = mid + 1
else:
return -1
binary_search([1,2,3,4,5,6,7,8,9,23,43,63,123,324],23) #9
binary_search([1,2,3,4,5,6,7,8,9,23,43,63,123,324],32) # -1
顺序查找(线性查找)
- 相比二分查找,速度要慢很多,事件复杂度为 O(n)
- index() 方法用的是顺序查找,因为二分查找在查找之前需要先做排序操作,排序操作的事件复杂度要高于查找
def learn_search(li, val):
for ind, v in enumerate(li):
if v == val:
return ind
else:
return -1