1.有A和B两个数组,A数组中存储500个2000以内的随机整数,B数组中存储10个2000以内的随机整数,完成以下操作: (1)用顺序查找算法显示B数组中每个元素在A数组中的位置,并返回该算法所用时间; (2)用折半查找算法显示B数组中每个元素在A数组中的位置,并返回该算法所用时间;
时间: 2024-03-26 16:35:47 浏览: 82
一组排好顺序的数,输入一个数用折半法找出这个数的位置
5星 · 资源好评率100%
好的,我来为您解答。
对于问题(1),顺序查找算法的时间复杂度为O(n),其中n为待查找数组的长度。因此,我们可以编写如下代码来实现顺序查找:
```python
import random
import time
# 生成A和B数组
A = [random.randint(1, 2000) for _ in range(500)]
B = [random.randint(1, 2000) for _ in range(10)]
# 定义顺序查找函数
def sequential_search(arr, target):
for i in range(len(arr)):
if arr[i] == target:
return i
return -1
# 在A数组中查找B数组中每个元素的位置
start_time = time.time()
for i in range(len(B)):
index = sequential_search(A, B[i])
print("B[{}]在A中的位置为: {}".format(i, index))
end_time = time.time()
print("顺序查找时间为: {:.6f}s".format(end_time - start_time))
```
代码中,我们先生成了A和B两个数组,然后定义了顺序查找函数`sequential_search`。该函数的作用是在给定的数组`arr`中查找目标元素`target`,如果找到则返回其下标,否则返回-1。接下来,我们遍历B数组中的每个元素,在A数组中进行顺序查找,最后输出每个元素在A数组中的位置以及总查找时间。
对于问题(2),折半查找算法的时间复杂度为O(logn),其中n为待查找数组的长度。因此,我们可以编写如下代码来实现折半查找:
```python
import random
import time
# 生成A和B数组
A = [random.randint(1, 2000) for _ in range(500)]
B = [random.randint(1, 2000) for _ in range(10)]
# 定义折半查找函数
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
# 在A数组中查找B数组中每个元素的位置
A.sort() # 折半查找需要先对A数组排序
start_time = time.time()
for i in range(len(B)):
index = binary_search(A, B[i])
print("B[{}]在A中的位置为: {}".format(i, index))
end_time = time.time()
print("折半查找时间为: {:.6f}s".format(end_time - start_time))
```
代码中,我们先生成了A和B两个数组,然后定义了折半查找函数`binary_search`。该函数的作用是在给定的已排好序的数组`arr`中查找目标元素`target`,如果找到则返回其下标,否则返回-1。接下来,我们对A数组进行排序,然后遍历B数组中的每个元素,在排好序的A数组中进行折半查找,最后输出每个元素在A数组中的位置以及总查找时间。
希望这个答案能够解决您的问题。
阅读全文