二分法查找也就是通常所说的折半查找,但是有一个要求:数组是必须是有序的。
思路分析:范围每次缩小一半,直到只剩一个元素。
代码思路:不断的除以2,假定我们要查找的元素是 who, 中点 middlePoint
# -*- coding: utf-8 -*-
def binarySearch(arr, who):
# 记录数组的最高位和最低位
min = 0
max = len(arr) - 1
if who in arr:
# 建立一个死循环,直到找到who
while True:
# 得到中位数
# 这里一定要加int,防止列表是偶数的时候出现浮点数据
middlePoint = int((min + max) / 2)
# who在数组左边
if arr[middlePoint] > who:
max = middlePoint - 1
# who
elif arr[middlePoint] < who:
min = middlePoint + 1
# who在数组中间
elif arr[middlePoint] == who:
print(str(who) + "在数组里面的第" + str(middlePoint+1) + "个位置")
return arr[middlePoint]
else:
print("没有找到该数字!")
if __name__ == "__main__":
arr = [1, 6, 9, 10, 23, 46, 88, 90, 100]
while True:
who = input("请输入你要查找的数字:")
if who == " ":
print("谢谢光临!")
break
else:
binarySearch(arr, int(who))
打印框:
请输入你要查找的数字:23
23在数组里面的第5个位置
请输入你要查找的数字:88
88在数组里面的第7个位置
请输入你要查找的数字: