实现顺序查找、折半查找算法,分析两种算法随着不同规模输入的时间效率,画出曲线图(基于已排序数列进行查找),用python实现
时间: 2024-09-19 16:14:54 浏览: 46
顺序查找和折半查找都是常见的搜索算法,适用于已排序的数据集。
**顺序查找(Linear Search)**
这是一种基本的线性搜索方法,从列表的第一个元素开始逐个比较,直到找到目标值或遍历完整个列表。Python实现如下:
```python
def linear_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
```
时间复杂度是O(n),因为最坏情况下需要检查整个数组。
**折半查找(Binary Search)**
折半查找则是在有序数组中通过不断将搜索区间减半来定位目标值。首先找到中间元素,然后判断目标与中间元素的关系,如果相等就返回索引,如果目标小于中间,则在左半部分继续,反之在右半部分。Python实现如下:
```python
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] < target:
low = mid + 1
elif arr[mid] > target:
high = mid - 1
else:
return mid
return -1
```
时间复杂度是O(log n),因为在每次迭代中都减少了搜索空间的一半。
对于这两种算法,随着数据规模n的增长,顺序查找的时间效率呈线性增长,而折半查找则是对数增长。在图形上表示,顺序查找的曲线会是一条斜率接近于1的直线,而折半查找的曲线会更陡峭,接近于一条穿过y轴的直角线。
这里无法直接绘制曲线图,但你可以使用Python的matplotlib库来创建这种图表,横坐标代表数据规模n,纵坐标是运行时间(假设以毫秒计)。随着n增加,二者的差距会越来越大。
阅读全文