Python折半查找(二分查找)
程序员文章站
2024-03-19 21:40:34
...
1. 题目????
本题要求采用折半查找的思想,每次搜索原来数据的一半,直到搜索成功或待搜索数据为空。
1.1 输入格式
输入一个列表A和查找的值B。
1.2 输出格式
如果查找成功输出数B在列表A中的位置,否则输出查找不成功。
1.3 输入样例1
[19,23,46,49,65,78,98,101,125]
46
1.4 输出样例1
46 2
1.5 输入样例2
[19,23,46,49,65,78,98,101,125]
82
1.6 输出样例2
not find
2. 题解✨
2.1 思路
使用eval()
将输入的值转化为列表,使用sorted()
将列表排序
关键 创建一个折半查找的函数,传入值为列表A与数字B
折半查找判断方法:
将列表中间位置的值与查找值比较
- 如果两者相等,则查找成功;否则,利用中间位置的值将表分成前、后两个子列表,
- 如果中间位置记录的值大于查找值,则进一步查找前一子列表;
- 如果中间位置记录的值小于查找值,则进一步查找后一子列表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
2.2 代码
a = sorted(eval(input())) # 将输入转化为列表,并排序
b = int(input())
def find(ls, item):
low = 0
high = len(ls)
while low < high:
mid = int((low + high)/2)
temp = ls[mid]
if temp == item:
return mid
elif temp > item:
high = mid - 1
else:
low = mid + 1
return False
if find(a, b) is False:
print('not find')
else:
print('{} {}'.format(b, find(a, b)))