以下例中顺序查找算法为参考,在输出结果相同的情况下,编写出设置监视哨的顺序查找和折半查找。
时间: 2024-03-05 12:53:14 浏览: 75
假设有一个长度为n的有序数组A,要查找元素x,以下为三种查找算法的实现:
1. 顺序查找
```python
def sequential_search(A, x):
for i in range(len(A)):
if A[i] == x:
return i
return -1
```
2. 设置监视哨的顺序查找
```python
def sentinel_search(A, x):
# 设置监视哨
A.append(x)
i = 0
while A[i] != x:
i += 1
if i == len(A) - 1:
return -1
else:
return i
```
3. 折半查找
```python
def binary_search(A, x):
low = 0
high = len(A) - 1
while low <= high:
mid = (low + high) // 2
if A[mid] == x:
return mid
elif A[mid] > x:
high = mid - 1
else:
low = mid + 1
return -1
```
注意,以上三种算法针对的都是有序数组。其中,顺序查找的时间复杂度是O(n),设置监视哨的顺序查找的时间复杂度也是O(n),但是由于设置了监视哨,因此平均情况下效率要比普通顺序查找要高。而折半查找的时间复杂度是O(log n),相对于顺序查找和设置监视哨的顺序查找,效率更高。
阅读全文