几种典型查找算法的实现 编程实现:利用折半查找算法实现在数据序列{2,3,6,33,45,66,88,100}分别查找关键字6和89的结果,找到输出位序,找不到输出相应提示信息。 其他算法:随机查找算法、哈希查找(有能力者尝试)
时间: 2023-09-03 19:04:57 浏览: 112
### 回答1:
使用折半查找算法实现在数据序列{2,3,6,33,45,66,88,100}分别查找关键字6和89的结果,找到输出位序,找不到输出相应提示信息的Python代码如下:
```python
def binary_search(arr, x):
low, high = 0, len(arr) - 1
while low <= high:
mid = (low + high) // 2
if arr[mid] == x:
return mid
elif arr[mid] < x:
low = mid + 1
else:
high = mid - 1
return -1
arr = [2, 3, 6, 33, 45, 66, 88, 100]
x = 6
result = binary_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
x = 89
result = binary_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
```
输出结果为:
```
6 found at position 3
89 not found in the array
```
随机查找算法的实现可以使用Python内置的random库,代码如下:
```python
import random
def random_search(arr, x):
size = len(arr)
for i in range(size):
if arr[random.randint(0, size-1)] == x:
return i
return -1
arr = [2, 3, 6, 33, 45, 66, 88, 100]
x = 6
result = random_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
x = 89
result = random_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
```
哈希查找算法的实现需要先设计哈希函数,这里使用简单的取余法,代码如下:
```python
def hash_func(key, size):
return key % size
def hash_search(arr, x):
size = len(arr)
hash_table = [[] for _ in range(size)]
for i in range(size):
hash_value = hash_func(arr[i], size)
hash_table[hash_value].append(i)
hash_value = hash_func(x, size)
for i in hash_table[hash_value]:
if arr[i] == x:
return i
return -1
arr = [2, 3, 6, 33, 45, 66, 88, 100]
x = 6
result = hash_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
x = 89
result = hash_search(arr, x)
if result != -1:
print(f"{x} found at position {result+1}")
else:
print(f"{x} not found in the array")
```
输出结果为:
```
6 found at position 3
89 not found in the array
```
### 回答2:
折半查找算法也叫二分查找算法,适用于有序的数据序列。实现方式如下:
1. 定义目标数据序列{2,3,6,33,45,66,88,100}。
2. 定义要查找的关键字6和89。
3. 定义两个指针low和high,分别指向数据序列的起始位置和结束位置。
4. 定义一个循环,直到low大于high结束。
5. 在循环中,计算中间元素的位置mid,即mid=(low+high)/2。
6. 比较中间元素和要查找的关键字:
a. 如果中间元素等于关键字,输出该元素的位序,并结束循环。
b. 如果中间元素大于关键字,说明关键字应该在mid的左边,更新high为mid-1。
c. 如果中间元素小于关键字,说明关键字应该在mid的右边,更新low为mid+1。
7. 如果循环结束时仍未找到关键字,则输出相应的提示信息。
按照上述步骤,利用折半查找算法可以得到以下结果:
- 查找关键字6的结果为,位序为3。
- 查找关键字89时,未在数据序列中找到,输出"未找到关键字89"的提示信息。
其他算法:
- 随机查找算法:该算法通过随机地选择数据序列中的一个元素进行比较,直到找到目标元素或者遍历完整个序列。该算法的效率较低,不适用于有序序列。
- 哈希查找:哈希查找算法通过将关键字映射为数组的下标来进行查找。该算法需要预先构建一个哈希表,并能够处理哈希冲突。在给定的数据序列中,可以使用哈希函数将关键字映射为数组的下标,然后在对应的数组位置中查找关键字。如果找到了关键字,则输出位序;如果未找到,则输出相应的提示信息。
### 回答3:
折半查找算法,也称为二分查找算法,是一种高效的查找算法。该算法要求数据序列必须是有序的。下面是使用折半查找算法来实现在数据序列{2,3,6,33,45,66,88,100}中分别查找关键字6和89的结果:
```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
data = [2, 3, 6, 33, 45, 66, 88, 100]
key1 = 6
key2 = 89
index1 = binary_search(data, key1)
index2 = binary_search(data, key2)
if index1 != -1:
print(f"关键字6的位序为: {index1}")
else:
print("未找到关键字6")
if index2 != -1:
print(f"关键字89的位序为: {index2}")
else:
print("未找到关键字89")
```
其中,在折半查找算法中,我们设置了一个指针`mid`,指向查找范围的中间位置。每次比较`arr[mid]`与目标值`target`的大小关系,根据比较结果调整查找范围的上界和下界。如果`arr[mid]`等于`target`,则表示找到了目标值,返回位置`mid`;如果`arr[mid]`小于`target`,则更新`low = mid + 1`,即将查找范围缩小到右边一半;如果`arr[mid]`大于`target`,则更新`high = mid - 1`,即将查找范围缩小到左边一半。如果最终`low`大于`high`,则表示未找到目标值,返回-1。
对于关键字6,折半查找算法返回位序为2;对于关键字89,折半查找算法返回未找到提示信息。
除了折半查找算法,还可以尝试其他的查找算法,如随机查找算法和哈希查找算法。随机查找算法是通过随机选择待查找的元素,根据比较结果逐步缩小查找范围,直到找到目标元素或者最终查找失败。哈希查找算法是通过将关键字通过哈希函数映射为数组的索引位置,根据索引位置直接访问数组中的元素来进行查找。这两种算法的实现略有复杂,需要借助更多的数据结构和算法思想,可以进一步探索学习。
阅读全文