实现顺序查找、折半查找算法,分析两种算法随着不同规模输入的时间效率,画出曲线图(基于已排序数列进行查找)
时间: 2024-09-19 11:14:51 浏览: 54
顺序查找(也叫线性查找)是一种基本的搜索算法,它通过遍历已排序的数列,从第一个元素开始逐个比较,直到找到目标值或遍历完整个序列为止。它的伪代码大致如下:
```python
def sequential_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
```
时间复杂度通常是O(n),因为最坏的情况下需要检查整个数组。
而折半查找(二分查找),又称对分查找,适用于已经排序的数组。该算法将数组分成两半,每次根据中间元素与目标值的大小关系来决定是在左半部分还是右半部分继续查找。如果中间元素正好就是目标,那么就找到了;否则,再在剩余的一半中继续搜索。其伪代码如下:
```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
```
时间复杂度通常为O(log n),因为它每次都能排除掉一半的搜索空间。
对于这两种查找算法,随着数据规模n的增长,顺序查找的时间线会形成一条斜率接近于1的直线,而折半查找则是一条逐渐接近常数的曲线。绘制它们的效率曲线,顺序查找的曲线会持续上升直到n,而折半查找则会在对数级别内达到峰值,之后保持稳定。
阅读全文