编写程序。实现对单调递增的整型序列中(如随机产生10个1-100之间的不重复整数序列),进行折半查找。用折半查找法找出一个数是数组中第几个元素,如果找到,则返回其下标;如果该数不在数组中,则返回-1。
时间: 2024-09-13 07:10:00 浏览: 48
编写程序来实现折半查找(也称为二分查找)算法的过程通常涉及以下几个步骤:
1. 定义函数 `binary_search`,它接受两个参数:一个已经排序的整数列表 `arr` 和要查找的目标值 `target`。
```python
def binary_search(arr, target):
```
2. 初始化两个指针,`low` 表示数组的起始索引(0),`high` 表示数组的结束索引(len(arr) - 1)。
```python
low = 0
high = len(arr) - 1
```
3. 使用一个 while 循环,在条件 `low <= high` 未满足时继续查找:
a. 计算中间索引 `mid`,即 `(low + high) // 2`。
b. 检查 `arr[mid]` 是否等于目标值 `target`:
- 如果相等,返回 `mid` 作为下标。
```python
if arr[mid] == target:
return mid
```
c. 否则,如果 `arr[mid]` 小于 `target`,将 `low` 更新为 `mid + 1`,因为目标可能在数组右半部分。
```python
elif arr[mid] < target:
low = mid + 1
```
d. 同样,如果 `arr[mid]` 大于 `target`,将 `high` 更新为 `mid - 1`,因为在左半部分寻找。
```python
else:
high = mid - 1
```
4. 当循环结束后(`low > high`),说明目标值不存在于数组中,返回 `-1`。
```python
return -1
```
完整代码示例(Python):
```python
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
low = mid + 1
else:
high = mid - 1
return -1
# 示例
arr = [1, 3, 5, 7, 9, 11, 13]
print(binary_search(arr, 7)) # 输出:3
print(binary_search(arr, 8)) # 输出:-1
```
阅读全文