【问题描述】 设有一整型查找表,利用二分查找法查找指定的关键字。 假设给出的查找表不确定是否排序,要求查找前,对查找表进行排序。 【输入形式】 输入若干组数据,每组数据包括: (1)输入整数n,表示查找表长度为n(n小于1000); (2)输入n个整数; (3)输入查找关键字key。 【输出形式】 若找到,输出关键字的位置序号(排序后的位置)及查找次数; 若未找到,输出“no”及查找次数。用折半查找
时间: 2024-02-28 21:54:23 浏览: 93
下面是用Python实现的代码:
```python
def binary_search(arr, key):
"""
二分查找算法
:param arr: 待查找的有序数组
:param key: 待查找的关键字
:return: 如果找到,返回关键字的位置序号及查找次数;如果未找到,返回"no"及查找次数
"""
# 先对数组进行排序
arr.sort()
low, high = 0, len(arr) - 1
count = 0 # 记录查找次数
while low <= high:
mid = (low + high) // 2
count += 1
if arr[mid] < key:
low = mid + 1
elif arr[mid] > key:
high = mid - 1
else:
return mid, count
return "no", count
n = int(input("请输入查找表长度n:"))
arr = []
for i in range(n):
arr.append(int(input("请输入第%d个整数:" % (i + 1))))
key = int(input("请输入待查找的关键字:"))
result = binary_search(arr, key)
if result[0] == "no":
print("未找到,查找次数为%d次。" % result[1])
else:
print("关键字的位置序号为%d,查找次数为%d次。" % (result[0], result[1]))
```
注意,这里的实现假设输入的查找表可能未排序,因此需要先进行排序。如果输入的查找表已经排序,则可以省略排序步骤,直接进行二分查找。
阅读全文