python用二分法查找[1,1,2,3,4,5,6,7,7,8,8,9,9,10,14,20,30,100,120],列表中小于8元素的位置
时间: 2023-10-27 11:08:38 浏览: 67
使用Python二分法查找[1,1,2,3,4,5,6,7,7,8,8,9,9,10,14,20,30,100,120]列表中小于8元素的位置,可以按照以下步骤进行:
1. 定义一个函数,给三个形参:列表,查找值,起始位置和结束位置。
2. 计算出中间位置的索引值。
3. 如果中间位置的值小于查找值,则在右半部分继续查找。
4. 如果中间位置的值大于等于查找值,则在左半部分继续查找。
5. 如果起始位置大于结束位置,则返回起始位置。
6. 在函数外部调用该函数,传入列表、查找值和起始位置和结束位置的初始值。
7. 返回小于查找值的元素的位置。
下面是实现代码:
```
def binary_search(arr, x, start, end):
if start > end:
return start
mid = (start + end) // 2
if arr[mid] < x:
return binary_search(arr, x, mid + 1, end)
else:
return binary_search(arr, x, start, mid - 1)
arr = [1,1,2,3,4,5,6,7,7,8,8,9,9,10,14,20,30,100,120]
x = 8
result = binary_search(arr, x, 0, len(arr) - 1)
print(result)
```
输出结果为:9,即小于8的元素的位置为9。
相关问题
python用二分法查找[1,1,2,3,4,5,6,7,7,8,8,9,9,10,14,20,30,100,120],列表中第一个大于8元素的位置
使用Python二分法查找列表中第一个大于8的元素位置的步骤如下:
1. 定义一个函数,给三个形参:列表,低位值,高位值。
2. 计算出中位数。
3. 如果中位数小于等于8,则锁定后半段。
4. 如果中位数大于8,则锁定前半段。
5. 如果找到第一个大于8的元素,则返回该元素的位置。
6. 如果没有找到,则返回-1。
代码如下:
```
def binary_search(lst, low, high):
while low <= high:
mid = (low + high) // 2
if lst[mid] <= 8:
low = mid + 1
else:
if mid == 0 or lst[mid - 1] <= 8:
return mid
else:
high = mid - 1
return -1
lst = [1,1,2,3,4,5,6,7,7,8,8,9,9,10,14,20,30,100,120]
result = binary_search(lst,0, len(lst) - 1)
if result == -1:
print("列表中没有大于8的元素")
else:
print("列表中第一个大于8的元素的位置为:", result)
```
python二分法查找代码
二分查找,也叫折半查找,是一种在有序数组中查找特定元素的搜索算法。其基本思想是每次将待查找范围缩小一半,直到找到目标元素或者确定它不存在。以下是Python实现二分查找的一个简单版本:
```python
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1 # 如果没找到,返回-1表示不存在
# 使用示例
arr = [1, 3, 5, 7, 9]
target = 5
result = binary_search(arr, target)
if result != -1:
print(f"元素 {target} 的位置是 {result}")
else:
print(f"{target} 不在数组中")
阅读全文