【问题描述】对一含有n(n<=100)个整数的序列,使用堆排序将其由小到大(非降序)排序。 【输入形式】第一行为元素的个数n,第二行为n个整数(以空格隔开)。 【输出形式】分三行,分别输出这n个整数排序前、构造堆之后、堆排序后的序列(整数之间以逗号隔开)。 注意:构造堆需采用自底向上构造算法来构造最大堆。 【样例输入】 9 50 10 90 30 70 40 80 60 20 【样例输出】 50,10,90,30,70,40,80,60,20 90,70,80,60,10,40,50,30,20 10,20,30,40,50,60,70,80,90
时间: 2023-08-22 12:04:21 浏览: 115
以下是堆排序的 Python 代码实现,可以参考:
```python
def heap_sort(nums):
n = len(nums)
# 构建最大堆
for i in range(n // 2 - 1, -1, -1):
heapify(nums, n, i)
# 堆排序
for i in range(n - 1, 0, -1):
nums[0], nums[i] = nums[i], nums[0]
heapify(nums, i, 0)
return nums
def heapify(nums, n, i):
largest = i
left = 2 * i + 1
right = 2 * i + 2
if left < n and nums[left] > nums[largest]:
largest = left
if right < n and nums[right] > nums[largest]:
largest = right
if largest != i:
nums[i], nums[largest] = nums[largest], nums[i]
heapify(nums, n, largest)
# 读入数据
n = int(input())
nums = list(map(int, input().split()))
# 排序前
print(*nums, sep=",")
# 堆排序
nums = heap_sort(nums)
# 排序后
print(*nums, sep=",")
```
输入样例:
```
9
50 10 90 30 70 40 80 60 20
```
输出样例:
```
50,10,90,30,70,40,80,60,20
90,70,80,60,10,40,50,30,20
10,20,30,40,50,60,70,80,90
```
阅读全文