编写程序。实现对单调递增的整型序列中(如随机产生10个1-100之间的不重复整数序列),进行折半查找。用折半查找法找出一个数是数组中第几个元素,如果找到,则返回其下标;如果该数不在数组中,则返回-1
时间: 2024-09-13 15:12:01 浏览: 57
编写程序实现折半查找算法的过程通常涉及以下几个步骤:
1. 定义函数 `binary_search`,它接受两个参数:一个已排序的整数列表(`arr`)和一个目标值(`target`)。
```python
def binary_search(arr, target):
```
2. 初始化两个指针,`left` 用于表示搜索范围的起始位置,通常是0;`right` 表示搜索范围的结束位置,初始值为列表长度减一。
```python
left, right = 0, len(arr) - 1
```
3. 使用一个 `while` 循环,只要 `left` 小于等于 `right`,循环就继续进行。
4. 计算中间索引 `mid`,并将目标值与中间元素比较:
```python
mid = (left + right) // 2
if arr[mid] == target: # 如果找到目标值,返回其下标
return mid
elif arr[mid] < target: # 目标大于中间元素,缩小左半部分的搜索范围
left = mid + 1
else: # 目标小于中间元素,缩小右半部分的搜索范围
right = mid - 1
```
5. 当搜索范围为空(即 `left > right`),说明目标值不存在于数组中,返回 -1。
```python
return -1 if left > right else None # 返回 -1 或者None(一些编程语言可能会使用None)
```
完整代码示例(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
# 示例
random_numbers = [i for i in range(1, 101)] # 随机生成1-100的不重复整数
print(binary_search(random_numbers, 50)) # 查找数字50的位置
```
阅读全文