查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找。
1. 顺序查找
顺序查找也称线性查找,从列表的第一个元素开始,顺序进行搜索,直到找到元素或搜索到最后一个元素为止。
代码如下:
def linear_search(li, val):
for ind, v in enumerate(li):
if v == val:
return ind
else:
return None
时间复杂度为O(n)
2. 二分查找
二分查找又称折半查找,仅适用于有序的顺序表。
基本思想:首先将给定值key与表中中间位置的元素比较,若相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分。然后缩小的范围内继续进行同样的查找,如此重复,直到找到为止,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。
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
时间复杂度为O(logn)
3. 补充
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
语法:enumerate(sequence, [start=0])
参数:
- sequence – 一个序列、迭代器或其他支持迭代对象。
- start – 下标起始位置的值。
返回值:返回 enumerate(枚举) 对象。
示例代码如下所示:
li = ['one', 'two', 'three']
for i, element in enumerate(li):
print i, element
得到结果如下:
0 one
1 two
2 three