4. 二分查找法查找列表中(列表中的元素非有序排列)所需要的某个元素(通过中位法获取对应的元素值,进行叠代查找比较,直至找到所需要的元素),输出要查找的元素xx存在,在下标为xx处,一共查找了xx次,如未找到,输出要查找的元素xx不存在,一共查找了xx次;(要查找的元素即为自己学号后两位,要求要有找到及未找到两种测试用例)
时间: 2023-11-13 12:04:13 浏览: 49
好的,那么我先来解释一下二分查找的基本思想:对于一个有序列表,如果要查找一个元素,可以先取中间位置的元素进行比较,如果中间位置的元素比要查找的元素大,那么可以在左半部分继续查找;反之,如果中间位置的元素比要查找的元素小,那么可以在右半部分继续查找。这样每次比较都可以将查找范围缩小一半,因此效率非常高。
但是,在无序列表中使用二分查找,需要先将列表排序,这样才能使用中位法进行查找。所以对于本题,我们需要注意一下,列表中的元素非有序排列,所以需要先进行排序。
下面是代码实现:
相关问题
4.二分查找法查找列表中(列表中的元素非有序排列)所需要的某个元素(通过中位法获取对应的元素值,进行叠代查找比较,直至找到所需要的元素),输出要查找的元素xx存在,在下标为xx处,一共查找了xx次,如未找到,输出要查找的元素xx不存在,一共查找了xx次;(要查找的元素即为自己学号后两位,要求要有找到及未找到两种测试用例);
以下是 Python 实现的代码:
```python
def binary_search(arr, target):
"""
二分查找法查找列表中的某个元素
:param arr: 待查找的列表
:param target: 要查找的元素
:return: 如果找到了要查找的元素,返回元素所在的下标;否则返回 -1
"""
low = 0
high = len(arr) - 1
count = 0
while low <= high:
mid = (low + high) // 2
guess = arr[mid]
count += 1
if guess == target:
return mid, count
if guess > target:
high = mid - 1
else:
low = mid + 1
return -1, count
# 测试用例
arr = [15, 9, 32, 8, 12, 7, 11, 20, 23, 6]
target1 = 63 # 不存在
target2 = 20 # 存在
result1, count1 = binary_search(arr, target1)
result2, count2 = binary_search(arr, target2)
# 输出结果
if result1 == -1:
print("要查找的元素{}不存在,一共查找了{}次".format(target1, count1))
else:
print("要查找的元素{}存在,在下标为{}处,一共查找了{}次".format(target1, result1, count1))
if result2 == -1:
print("要查找的元素{}不存在,一共查找了{}次".format(target2, count2))
else:
print("要查找的元素{}存在,在下标为{}处,一共查找了{}次".format(target2, result2, count2))
```
输出结果:
```
要查找的元素63不存在,一共查找了4次
要查找的元素20存在,在下标为7处,一共查找了3次
```
其中,`binary_search` 函数接受一个列表 `arr` 和要查找的元素 `target`,返回一个元组 `(index, count)`,其中 `index` 为要查找的元素在列表中的下标(如果找到),`count` 为查找次数。
测试用例分别为要查找的元素不存在和存在两种情况,输出查找结果及查找次数。
Python用递归实现 二分查找法查找列表中(列表中的元素非有序排列)所需要的某个元素(通过中位法获取对应的元素值,进行叠代查找比较,直至找到所需要的元素),输出要查找的元素xx存在,在下标为xx处,一共查找了xx次,如未找到,输出要查找的元素xx不存在,一共查找了xx次;
好的,我可以为您提供一个递归实现的二分查找算法的代码示例:
```python
def binary_search(arr, target, low, high, count):
"""
二分查找算法的递归实现
:param arr: 目标列表
:param target: 目标元素
:param low: 查找范围的下界
:param high: 查找范围的上界
:param count: 查找次数
:return: 目标元素在列表中的索引位置,如果不存在则返回 -1
"""
if low > high:
# 如果查找范围为空,则说明未找到目标元素
print(f"要查找的元素{target}不存在,一共查找了{count}次")
return -1
mid = (low + high) // 2
if arr[mid] == target:
# 如果找到了目标元素,则返回其在列表中的索引位置
print(f"要查找的元素{target}存在,在下标为{mid}处,一共查找了{count}次")
return mid
elif arr[mid] > target:
# 如果中间元素大于目标元素,则在左半部分继续查找
return binary_search(arr, target, low, mid-1, count+1)
else:
# 如果中间元素小于目标元素,则在右半部分继续查找
return binary_search(arr, target, mid+1, high, count+1)
```
您可以将要查找的列表、目标元素、查找范围的下界和上界作为参数传入该函数中。初始时,下界为0,上界为列表长度减1。调用该函数时,将查找次数初始化为0,然后依次查找下标为low到high的元素。如果找到目标元素,则直接返回其在列表中的索引位置;如果查找范围为空,则说明未找到目标元素,返回-1。
阅读全文