输入一个已经排好序的顺序表,利用折半查找算法实现对表中元素的查找,并输出元素在顺序表中的序号。
时间: 2023-11-06 11:04:40 浏览: 106
采用折半查找和顺序查找来查找某个数
折半查找算法也叫二分查找算法,其基本思想是将查找的区间一分为二,判断待查找的元素在哪一半中,然后重复这个过程直到找到或者确定找不到为止。
具体实现如下:
1. 定义折半查找函数,接收已排序的顺序表、待查找的元素值和顺序表的长度作为参数。
2. 初始化左右边界,左边界为0,右边界为顺序表长度减一。
3. 当左边界小于等于右边界时,执行以下步骤:
a. 取中间位置为当前查找区间的中间位置,计算中间位置的元素值。
b. 如果中间位置的元素值等于待查找元素值,直接返回中间位置。
c. 如果中间位置的元素值大于待查找元素值,说明待查找元素在当前查找区间的左半部分,将右边界更新为中间位置减一。
d. 如果中间位置的元素值小于待查找元素值,说明待查找元素在当前查找区间的右半部分,将左边界更新为中间位置加一。
4. 如果查找完整个顺序表仍未找到待查找元素,返回-1表示未找到。
实现代码如下:
```python
def binary_search(seq, target, n):
left = 0
right = n - 1
while left <= right:
mid = (left + right) // 2
if seq[mid] == target:
return mid
elif seq[mid] > target:
right = mid - 1
else:
left = mid + 1
return -1
seq = [1, 3, 4, 7, 9, 12, 15]
target = 7
n = len(seq)
result = binary_search(seq, target, n)
if result == -1:
print("未找到")
else:
print("元素在顺序表中的序号为:", result)
```
以上代码的输出结果为:
```
元素在顺序表中的序号为: 3
```
阅读全文