Niklaus Wirth: “程序=数据结构+算法”
查找:在⼀些数据元素中,通过⼀定的⽅法找出与给定关键字相同的数据元素的过程。
列表查找(线性表查找):从列表中查找指定元素
输⼊:列表、待查找元素
输出:元素下标(未找到元素时⼀般返回None或-1)
内置列表查找函数:index()
本文介绍两种查找方法:顺序查找和二分查找。
一、线性查找
顺序查找:也叫线性查找,从列表第⼀个元素开始,顺序进⾏搜索,直到找到元素或搜索到列表最后⼀个元素为⽌。
时间复杂度:O(n)
python实现:
def line_search(data_set, val):
for index, data in enumerate(data_set):
if data == val:
reutrn index
else:
return None
二、二分查找
⼆分查找:⼜叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的⽐较,可以使候选区减少⼀半。
时间复杂度:O(logn)
从列表中找到元素7:
python实现:
def bin_search(data_set, val):
left = 0
right = len(data_set) - 1
while left <= right:
mid = (left + right) // 2
if data_set(mid) == val:
return mid
elif data_set[mid] > val: #查找的数据在[left, mid-1]之间
right = mid - 1
else: #查找的数据在[mid+1, right]之间
left = mid + 1