使用二分查找算法查找出数组中的最大值,数组你自己定义,用python代码去实现
时间: 2023-11-28 18:50:21 浏览: 101
下面是用Python实现二分查找算法查找数组中的最大值的示例代码:
```python
def binary_search_max(array):
low, high = 0, len(array) - 1
while low < high:
mid = (low + high) // 2
if array[mid] < array[mid + 1]:
low = mid + 1
else:
high = mid
return array[low]
```
这里的二分查找实现逻辑是,每次将数组分为左右两段,分别判断中间元素和中间元素的下一个元素的大小关系,如果中间元素小于中间元素的下一个元素,则说明最大值在右半边,否则最大值在左半边。然后不断缩小查找范围,最终找到最大值所在的位置并返回。
相关问题
使用二分查找算法查找出数组中的最大值,数组你自己定义,使用python实现,要有注释
好的,下面是使用二分查找算法查找出数组中的最大值的 Python 代码,已经加上了注释:
```python
def binarySearchMax(arr):
"""
使用二分查找算法查找出数组中的最大值
:param arr: 待查找的数组
:return: 数组中的最大值
"""
# 数组长度
n = len(arr)
# 如果数组只有一个元素,直接返回该元素
if n == 1:
return arr[0]
# 如果数组有两个元素,返回较大的那个
if n == 2:
return arr[0] if arr[0] > arr[1] else arr[1]
# 如果数组有多个元素,进行二分查找
# 定义左右指针
left = 0
right = n - 1
while left <= right:
mid = (left + right) // 2
# 如果当前元素是最大值,则返回该元素
if mid == 0 and arr[mid] > arr[mid + 1]:
return arr[mid]
if mid == n - 1 and arr[mid] > arr[mid - 1]:
return arr[mid]
if arr[mid] > arr[mid - 1] and arr[mid] > arr[mid + 1]:
return arr[mid]
# 如果当前元素不是最大值,则根据二分查找的规则更新左右指针
if arr[mid] < arr[mid - 1]:
right = mid - 1
else:
left = mid + 1
```
这个函数接受一个数组作为参数,返回数组中的最大值。如果数组只有一个元素,直接返回该元素;如果数组有两个元素,返回较大的那个;如果数组有多个元素,进行二分查找,找到数组中的最大值。
编写python代码实现如下描述算法,并以ls=[1,5,23,78,34,67,13,56,60]作为测试样例,找出需要查找次数最大的数字并打印最大的查找次数。 [算法步骤] 1)首先对原数组进行排序 2)确定整个查找区间的中间位置 3)用待查关键字值与中间位置关键字值进行比较; 若相等,则查找成功; 若大于,则在后半个区域中继续进行折半查找。 若小于,则在前半个区域中继续进行折半查找。 查找成功,返回关键字所在数组下标,没找到返回-1;
```python
ls = [1, 5, 23, 78, 34, 67, 13, 56, 60]
# 对ls进行排序
ls.sort()
# 定义函数实现二分查找
def binary_search(lst, key):
low, high = 0, len(lst) - 1
count = 0 # 统计查找次数
while low <= high:
mid = (low + high) // 2 # 确定中间位置
if lst[mid] < key:
low = mid + 1
elif lst[mid] > key:
high = mid - 1
else:
count += 1
return mid, count # 查找成功,返回关键字所在数组下标并结束函数
count += 1
return -1, count # 查找失败,返回-1并结束函数
max_count = 0 # 最大的查找次数
for i in ls:
_, count = binary_search(ls, i)
if count > max_count:
max_count = count
print("最大的查找次数为:", max_count)
```
输出结果:
```
最大的查找次数为: 4
```
阅读全文