1. 顺序查找
无序序列or顺序序列
时间复杂度:O(n)
ASL = (n+1)/2
def search(arr, a):
for i in range(len(arr)):
if arr[i] == a:
return i
return -1
2. 二分查找
顺序序列
时间复杂度:O()。
比较次数:a < < b, 最多比较b次(未找到),最少比较a次。
ASL =
#若未找到,则返回需要插入target的位置
def bisearch(arr, target):
l = 0
r = len(arr) -1
while l < r:
mid = int((l+r)/2)
if arr[mid] == target:
return mid
if arr[mid] < target:
l= mid + 1
if arr[mid] > target:
r = mid - 1
return r
3. 插值查找
顺序序列
类似于二分查找,但是mid值的选择是自适应的,公式为:, 即考察target是更靠左,还是更靠右。对于表长大,分布均匀的查找来说,插值要优于二分。
def search(arr, target):
l = 0
r = len(arr) - 1
mid = int(l + (r-l)*((target-arr[l])/(arr[r]-arr[l])))
if arr[mid] == target:
return mid
if arr[mid] < target:
l = mid + 1
if arr[mid] > target:
r = mid - 1
return -1
4. 斐波那契查找
类似于二分
5. 哈希查找
即python中的字典,速度最快,用空间换时间。