分别利用分类二叉树查找和堆排序实现学生成绩管理 1)利用以下数据的总成绩构建分类二叉树,给出中序遍历结果,给出最高分和最低分学生信息。 2)利用堆排序实现以下数据的总成绩、数学成绩的排序。 考号:1001 语文:1 数学:1 总分:2 考号:1002 语文:2 数学:2 总分:4
时间: 2023-06-27 21:06:38 浏览: 47
1)利用分类二叉树查找实现学生成绩管理
首先,根据给定的数据,我们可以得到以下的分类二叉树:
```
2
/ \
1 4
/ \
2 2
```
其中,每个节点表示一个学生的总成绩,左子树为总成绩小于该节点的学生,右子树为总成绩大于等于该节点的学生。
中序遍历结果为:1, 2, 2, 4。
最高分学生信息为:考号1002,语文成绩2,数学成绩2,总分4。
最低分学生信息为:考号1001,语文成绩1,数学成绩1,总分2。
2)利用堆排序实现学生成绩管理
我们可以将学生信息存储在一个二维数组中,每一行代表一个学生,每一列代表该学生的一项成绩。例如,对于给定的数据,可以表示为:
```
[
[1001, 1, 1, 2],
[1002, 2, 2, 4]
]
```
接下来,我们可以利用堆排序算法对总成绩和数学成绩进行排序。
首先,对于总成绩,我们可以建立一个大根堆,每次取出堆顶元素(即最大值),并将其放入结果数组中,直到堆为空。具体实现如下:
```python
def heap_sort_total_score(data):
n = len(data)
for i in range(n // 2 - 1, -1, -1):
heapify_total_score(data, n, i)
res = []
for i in range(n - 1, -1, -1):
data[0], data[i] = data[i], data[0]
res.append(data[i])
heapify_total_score(data, i, 0)
return res
def heapify_total_score(data, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and data[left][3] > data[largest][3]:
largest = left
if right < n and data[right][3] > data[largest][3]:
largest = right
if largest != i:
data[i], data[largest] = data[largest], data[i]
heapify_total_score(data, n, largest)
```
其中,data为二维数组,n为数组的长度,i为当前节点的索引,heapify_total_score函数用于调整堆。
对于数学成绩,我们可以建立一个小根堆,每次取出堆顶元素(即最小值),并将其放入结果数组中,直到堆为空。具体实现如下:
```python
def heap_sort_math_score(data):
n = len(data)
for i in range(n // 2 - 1, -1, -1):
heapify_math_score(data, n, i)
res = []
for i in range(n):
res.append(data[0])
data[0] = data[-1]
data.pop()
heapify_math_score(data, len(data), 0)
return res
def heapify_math_score(data, n, i):
smallest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and data[left][2] < data[smallest][2]:
smallest = left
if right < n and data[right][2] < data[smallest][2]:
smallest = right
if smallest != i:
data[i], data[smallest] = data[smallest], data[i]
heapify_math_score(data, n, smallest)
```
其中,data为二维数组,n为数组的长度,i为当前节点的索引,heapify_math_score函数用于调整堆。
最终,对于给定的数据,我们可以得到以下的排序结果:
按总成绩排序:[[1002, 2, 2, 4], [1001, 1, 1, 2]]
按数学成绩排序:[[1001, 1, 1, 2], [1002, 2, 2, 4]]