已知有20个学生记录(包括学号,姓名,成绩等) 设计三个查找算法,分别实现按学号、姓名、成绩的折半查找; 菜单选择查找方式;
时间: 2024-02-03 11:12:20 浏览: 21
好的,下面是三个查找算法的实现:
1. 按学号的折半查找
```python
def binary_search_by_id(records, target_id):
left = 0
right = len(records) - 1
while left <= right:
mid = (left + right) // 2
if records[mid]['id'] == target_id:
return mid
elif records[mid]['id'] < target_id:
left = mid + 1
else:
right = mid - 1
return -1
```
2. 按姓名的折半查找
```python
def binary_search_by_name(records, target_name):
left = 0
right = len(records) - 1
while left <= right:
mid = (left + right) // 2
if records[mid]['name'] == target_name:
return mid
elif records[mid]['name'] < target_name:
left = mid + 1
else:
right = mid - 1
return -1
```
3. 按成绩的折半查找
```python
def binary_search_by_score(records, target_score):
left = 0
right = len(records) - 1
while left <= right:
mid = (left + right) // 2
if records[mid]['score'] == target_score:
return mid
elif records[mid]['score'] < target_score:
left = mid + 1
else:
right = mid - 1
return -1
```
然后,可以通过菜单选择不同的查找方式:
```python
def search_menu(records):
while True:
print('请选择查找方式:')
print('1. 按学号查找')
print('2. 按姓名查找')
print('3. 按成绩查找')
print('4. 退出')
choice = input('请输入选项:')
if choice == '1':
target_id = input('请输入要查找的学号:')
index = binary_search_by_id(records, target_id)
if index == -1:
print('未找到记录')
else:
print('找到记录:', records[index])
elif choice == '2':
target_name = input('请输入要查找的姓名:')
index = binary_search_by_name(records, target_name)
if index == -1:
print('未找到记录')
else:
print('找到记录:', records[index])
elif choice == '3':
target_score = input('请输入要查找的成绩:')
index = binary_search_by_score(records, target_score)
if index == -1:
print('未找到记录')
else:
print('找到记录:', records[index])
elif choice == '4':
break
else:
print('无效选项,请重新输入')
```
注意,这里的 `records` 是一个包含所有学生记录的列表,每个记录是一个字典,包含学号、姓名、成绩等信息。