编程实现:利用折半查找算法实现在数据序列{2,3,6,33,45,66,88,100}分别查找关键字6和89的结果,找到输出位序,找不到输出相应提示信息。 其他算法:随机查找算法、哈希查找(有能力者尝试)
时间: 2024-02-23 22:00:24 浏览: 87
好的,以下是折半查找算法的实现:
```python
def binary_search(arr, key):
low = 0
high = len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == key:
return mid
elif arr[mid] > key:
high = mid - 1
else:
low = mid + 1
return -1
```
然后,我们可以使用这个函数来查找关键字6和89在数据序列{2,3,6,33,45,66,88,100}中的位置:
```python
arr = [2,3,6,33,45,66,88,100]
# 查找关键字6
key = 6
result = binary_search(arr, key)
if result == -1:
print(f"{key}不存在于该序列中")
else:
print(f"{key}在序列中的位置为: {result+1}")
# 查找关键字89
key = 89
result = binary_search(arr, key)
if result == -1:
print(f"{key}不存在于该序列中")
else:
print(f"{key}在序列中的位置为: {result+1}")
```
输出结果为:
```
6在序列中的位置为: 3
89不存在于该序列中
```
对于随机查找算法,我们可以使用Python内置的random模块生成随机数,然后在数据序列中查找该随机数。代码如下:
```python
import random
def random_search(arr, key):
while True:
index = random.randint(0, len(arr)-1)
if arr[index] == key:
return index
```
然后我们可以使用这个函数来查找数据序列{2,3,6,33,45,66,88,100}中的随机数47:
```python
arr = [2,3,6,33,45,66,88,100]
# 查找随机数47
key = 47
result = random_search(arr, key)
if result == -1:
print(f"{key}不存在于该序列中")
else:
print(f"{key}在序列中的位置为: {result+1}")
```
输出结果为:
```
47不存在于该序列中
```
对于哈希查找算法,我们可以使用Python内置的字典类型来实现哈希表。首先,我们需要定义一个哈希函数,将关键字映射到哈希表的索引位置。这里我们使用简单的取模运算作为哈希函数:
```python
def hash_func(key):
return key % 7
```
然后,我们可以将数据序列{2,3,6,33,45,66,88,100}插入到哈希表中:
```python
hash_table = {}
for num in arr:
index = hash_func(num)
if index in hash_table:
hash_table[index].append(num)
else:
hash_table[index] = [num]
```
接下来,我们可以使用哈希表来查找关键字6和89:
```python
# 查找关键字6
key = 6
index = hash_func(key)
if index in hash_table and key in hash_table[index]:
pos = hash_table[index].index(key)
print(f"{key}在序列中的位置为: {index*len(hash_table[index])+pos+1}")
else:
print(f"{key}不存在于该序列中")
# 查找关键字89
key = 89
index = hash_func(key)
if index in hash_table and key in hash_table[index]:
pos = hash_table[index].index(key)
print(f"{key}在序列中的位置为: {index*len(hash_table[index])+pos+1}")
else:
print(f"{key}不存在于该序列中")
```
输出结果为:
```
6在序列中的位置为: 3
89不存在于该序列中
```
阅读全文