算法
查找算法
查找算法:根据给定的值,在待查找的范围中确认是否存在某一数据于指定值相同
1.顺序查找:从待查找的数据中第一个元素开始,逐个将每个元素值与指定的值进行对比
特点:不要求本身有序,但数据量大时效率低
# 原始数据 - value
# 待查找数据 - key
def linear(value, key):
# a=0
# for i in value:
# a += 1
# if i == key:
# return a
# else:
# return -1
for i in range(len(value)):
if value[i] == key:
return i
else:
return -1
values = [3, 6, 9, 1, 4, 7, 8, 2, 10, 5, 11, 13, 12]
key = 6
res = linear(values, key)
if res == -1:
print('查找失败')
else:
print('查找成功,对应下标值:', res)
2.折半查找(二分查找):(在有序数据集合中查找数据,默认从小到大排序)找出有序数据中的中间元素,由中间元素将源数据分为左右两部分。比较中间值与指定值大小,来确定向左还是向右查找。如此递归下去,直至找到指定值。
循环实现二分查找算法:
def binary(value,key):
left = 0
right = len(value) - 1
while left <= right:
middle = (left + right)//2
if value == middle:
return middle
elif value <= middle:
right = middle - 1
else:
left = middle + 1
return -1
values = [1,2,3,4,5,6,7,8,9,10]
key = 6
res = binary(values,key)
if res == -1:
print("查找失败")
else:
print("成功",res)
迭代实现二分查找
def binary(value,key,left,right):
if left >= right:
return -1
middle = (left + right) // 2
if value[middle] == key:
return middle
elif value[middle] >= key:
return binary(value,key,left,middle -1)
else:
return binary(value,key,middle + 1,right)
values = [1,2,3,4,5,6,7,8,9,10]
key = 6
res = binary(values,key,0,len(values)-1)
if res == -1:
print("失败")
else:
print("成功",res)