一、顺序查找
顺序查找也称为线性查找,是所有查找算法中最简单的,一般用于线性表的查找。
简而言之,就是从下标为0的元素开始进行逐一查找,直到列表中最后一个元素。
顺序查找的优缺点:
- 优点:对于列表没有排序的要求
- 缺点:查找效率低
代码实现:
# 普通实现
num = eval(input('请输入一个数组:'))
sort_num = sorted(num)
user_num = int(input('请输入此次查找数字:'))
print(f'从小到大排序为:{sort_num}')
for index,i in enumerate(sort_num):
if i == user_num:
print(f'找到啦!!! 下标为:{index}')
else:
print('很遗憾,没找到!!!')
上段代码第一行中的eval()是python的内置函数,当需要输入列表的时候使用
# 用函数实现
def seqSearch(alist, n): # alist用来接收列表,n用来接收要查找的数字
for index, i in enumerate(alist):
if i == n:
return index
else:
return None
num = eval(input('请输入一个数组:'))
sort_num = sorted(num)
user_num = int(input('请输入此次查找数字:'))
print(f'从小到大排序为:{sort_num}')
if seqSearch(sort_num, user_num):
print(f'找到啦!!! 下标为:{seqSearch(sort_num, user_num)}')
else:
print('很遗憾,没找到!!!')
两段代码中的enumerate()为python的内置函数,是枚举函数,输出结果中包含两部分:
- 第一部分------》元素的下标(索引)值
- 第二部分------》相对应的元素值
二、二分查找
二分查找也称为折半查找,相比较顺序查找,减少了查找次数、提高了查找效率。
二分查找的算法思想:
将列表中n个元素大致分成2个相等的部分,在python中,取得是 a[n//2] 与 要查找的数字(这里设为x)比较,如果相等,算法终止;如果不相等继续比较,当 a[n//2]大于x,则取前n//2个数据,当 a[n//2]小于x,则取后n//2个数据。以此类推,直至找到x。
总共有n个元素,渐渐跟下去就是n,n/2,n/4,....n/2^k(接下来操作元素的剩余个数),其中k就是循环的次数。
注意:二分查找要求待查列表为有序的(从小到大排序,或者从大到小排序)
二分查找优缺点:
- 优点
- 比较次数减少
- 查找效率高
- 缺点
- 列表插入删除困难
代码实现:
# 普通算法
def binary_search(data, alist):
n = len(alist)
start = 0
end = n-1
while start <= end:
mid = (start + end) // 2
if alist[mid] < data:
start = mid + 1
elif alist[mid] > data:
end = mid - 1
else:
return True
return False
num = eval(input('请输入一个数组:'))
sort_num = sorted(num)
user_num = int(input('请输入此次查找数字:'))
print(f'从小到大排序为:{sort_num}')
if binary_search(user_num, sort_num):
print('找到啦!!!')
else:
print('很遗憾,没找到!!!')
用递归实现:
def binary_search(data, alist):
n = len(alist)
while n > 0:
mid = n // 2
if alist[mid] < data:
return binary_search(data, alist[mid+1:])
elif alist[mid] > data:
return binary_search(data, alist[:mid])
else:
return True, mid
return False
num = eval(input('请输入一个数组:'))
sort_num = sorted(num)
user_num = int(input('请输入此次查找数字:'))
print(f'从小到大排序为:{sort_num}')
if binary_search(user_num, sort_num):
print('找到啦!!!')
else:
print('很遗憾,没找到!!!')
写的不好的地方请见谅!!!并且希望您指出不好的地方,我改正。