有15个数按由大到小存放在一个序列中,输入一个数,要求用折半查找法找出该数是序列中第几个元素的值。如果该数不在序列中,则输出“无此数”。
时间: 2024-05-06 11:16:34 浏览: 80
折半查找法又称二分查找法,是一种高效的查找算法。在有序序列中查找元素时,每次将待查找区间缩小一半,直到找到目标元素或者确定目标元素不存在为止。
具体实现如下:
# 二分查找法
def binary_search(nums, target):
left = 0
right = len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return -1
# 主程序
nums = [15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] # 有序序列
target = int(input("请输入要查找的数:"))
index = binary_search(nums, target)
if index == -1:
print("无此数")
else:
print("该数是序列中第 %d 个元素的值。" % (index + 1))
运行结果:
请输入要查找的数:7
该数是序列中第 8 个元素的值。
相关问题
将20个数存放在一个数组中,首先使用选择法或冒泡法对这 20个数按升序排列,并输出排序后的结果;然后从键盘输入一个 数,要求用二分查找(也称折半查找,Binary Search)的方法找 出该数在数组中的位置(即下标),如果该数不在数组中,则输 出"无此数”。
在程序设计中,你可以采用以下步骤来实现这个功能:
- 数组初始化和排序:
- 首先,创建一个长度为20的整型数组,然后通过用户输入或者其他数据源填充20个数。
- 接着,可以使用选择排序(Selection Sort)或冒泡排序(Bubble Sort)算法对数组进行升序排列。选择排序每次遍历找到最小值并交换到当前位置,而冒泡排序则通过不断比较相邻元素交换位置,直到整个序列有序。
# 使用冒泡排序为例
def bubble_sort(arr):
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
- 二分查找:
- 输入搜索的数值之后,编写二分查找函数。它接受排序好的数组、目标值以及数组的起始和结束索引作为参数。函数会反复将搜索区间减半,直到找到目标值或确定其不存在于数组内。
def binary_search(arr, target, low, high):
if low > high:
return "无此数"
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
return binary_search(arr, target, mid+1, high)
else:
return binary_search(arr, target, low, mid-1)
- 完整流程:
- 对数组进行排序。
- 调用二分查找函数并打印结果。
arr = [...initially filled with 20 numbers...] # 用户输入或初始数据
bubble_sort(arr)
num_to_find = int(input("请输入一个数:"))
position = binary_search(arr, num_to_find, 0, len(arr)-1)
if position != "无此数":
print(f"该数在数组中的位置是 {position}")
else:
print("无此数")
相关推荐












