数据结构与算法——查找

数据结构与算法基础

什么是查找?

查找:在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程
列表查找(线性表查找):从列表中查找指定元素(输出为元素下标)
内置列表查找函数:index()
index()是线性查找

顺序查找

顺序查找也叫线性查找,从列表第一个元素开始,顺序进行搜索,直到找到元素或搜索到列表最后一个元素为止
代码实现如下:

def linear_search(li,val):
    for ind , v in enumerate(li):
        if v == val:
            return ind
    else:
        return  None

这里你们肯定有疑惑为什么用enumera()呢?

我将介绍它的作用:
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

普通的 for 循环 :

i = 0
seq = ['one', 'two', 'three']
for element in seq:
		print i, seq[i]
		i += 1
#输出:
0 one
1 two
2 three

for 循环使用 enumerate:

seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
		print i, element
#输出:
0 one
1 two
2 three

②二分查找

二分查找又叫折半查找,从有序列表的初始候选区li[0:n]开始,通过对待查找的值与候选区中间值的比较,可以使候选区减少一半。(条件:必须先排序!)
代码实现如下:

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  None

③顺序查找与二分查找的比较

二分查找的时间复杂度:O(logn)
线性查找的时间复杂度:O(n)
可知二分查找的时间复杂度比顺序查找的时间复杂度小,速度更快!
但是二分查找是有序的,顺序查找则是无序。如果要先排序且时间很久推荐使用顺序查找,要是该数据一直使用的话,推荐使用二分查找

你可能感兴趣的:(Python语法,蓝桥杯,职场和发展,python)