python二分法查找程序,输入一批从小到大的整数,以回车结束,存入列表中。再输入一个要查找的数,输出此数在列表中的索引位置,如不存在则输出-1。
时间: 2024-02-12 09:05:46 浏览: 154
可以使用二分查找算法来在已排序的列表中查找一个元素。以下是一个示例程序,其中`lst`为从小到大排序的整数列表,`x`为要查找的数:
```
def binary_search(lst, x):
left, right = 0, len(lst) - 1
while left <= right:
mid = (left + right) // 2
if lst[mid] == x:
return mid
elif lst[mid] < x:
left = mid + 1
else:
right = mid - 1
return -1
# 从标准输入读入一批整数,存入列表中
lst = list(map(int, input().split()))
# 读入要查找的数
x = int(input())
# 在列表中查找要查找的数
index = binary_search(lst, x)
# 输出结果
if index == -1:
print("-1")
else:
print(index)
```
在运行程序时,首先输入从小到大排序的整数,以空格分隔,按回车结束。然后再输入要查找的数,按回车结束。程序将输出要查找的数在列表中的索引位置,或者-1表示列表中不存在该数。
相关问题
python二分法,输入一批从小到大的整数,以回车结束,存入列表中。再输入一个要查找的数,输出此数在列表中的索引位置,如不存在则输出-1
下面是Python实现二分查找的代码,实现在输入一批从小到大的整数,以回车结束,存入列表中。再输入一个要查找的数,输出此数在列表中的索引位置,如不存在则输出-1。
```
def binary_search(nums, target):
"""
二分查找
nums: 有序列表
target: 要查找的数
return: 目标数在列表中的索引位置,如果不存在则返回-1
"""
left, right = 0, len(nums) - 1
while left <= right:
mid = (left + right) // 2
if nums[mid] == target:
return mid
elif nums[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
# 输入一批从小到大的整数,以回车结束,存入列表中
num_list = []
while True:
num_str = input("请输入一个整数(回车结束):")
if num_str == "":
break
num = int(num_str)
num_list.append(num)
# 输入要查找的数
target_str = input("请输入要查找的数:")
target = int(target_str)
# 在列表中查找目标数的索引位置
index = binary_search(num_list, target)
if index != -1:
print("目标数在列表中的索引位置为:", index)
else:
print("目标数不存在于列表中。")
print("-1")
```
运行程序后,按照提示输入一批从小到大的整数,以回车结束,再输入要查找的数,即可得到目标数在列表中的索引位置,或者提示目标数不存在于列表中。
python输入一批从小到大的整数,以回车结束,存入列表中。再输入一个要查找的数,输出此数在列表中的索引位置,如不存在则输出-1。用扫描法或者二分法都可以
我们可以先使用扫描法实现该功能。具体实现代码如下:
```python
num_list = list(map(int, input().split())) # 输入一批从小到大的整数,以空格分隔
x = int(input()) # 输入要查找的数
index = -1 # 初始化索引为-1
for i in range(len(num_list)):
if num_list[i] == x: # 找到要查找的数
index = i
break
print(index) # 输出索引位置
```
接下来我们用二分法进行实现。具体实现代码如下:
```python
num_list = list(map(int, input().split())) # 输入一批从小到大的整数,以空格分隔
x = int(input()) # 输入要查找的数
left, right = 0, len(num_list) - 1 # 定义左右边界
while left <= right:
mid = (left + right) // 2 # 计算中间位置
if num_list[mid] == x: # 找到要查找的数
print(mid)
break
elif num_list[mid] < x: # 在右半部分继续查找
left = mid + 1
else: # 在左半部分继续查找
right = mid - 1
else:
print(-1) # 没有找到要查找的数
```
以上两段代码分别使用了扫描法和二分法来实现在有序列表中查找一个数的功能。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)