我们首先需要了解到堆排序可以解决什么样的问题,毫无疑问,排序,说的简单点就是给一组无序的数字进行排序调整,使其按一定规律,或从大到小或从小到大的顺序有序排列。
堆排序相对于冒泡,选择排序来说,思考的更为难点。所以在学习堆排序的时候,我们选择了先行理解二叉树的定义以及操作。
举个例子,有一个树,请打印出来下面的样子
对于这样一题的要求,需要严格对齐,就像一个二叉树一样。
思路
那我们不禁想了,这样的打印出来,我们可以第一行取一个打印,第二行取2个,第三行取4个,以此类推,来将数在列表中取出来所以代码操作如下:
import math
# 居中打印
def print_tree(array: list, unit_width=2):
length = len(array)# 9
height = math.ceil(math.log2(length + 1))#4
index = 0
width = 2 ** height - 1#行宽,最深的行15个数
for i in range(height):#0 1 2 3
for j in range(2 ** i):#计数 0:0 1 1:0,1 2:0,1,2,3 3:0-7
#居中打印,后面追加一个空格,因为7//2=3,3+3=6 ,少了
print("{:^{}}".format(array[index], width * unit_width), end=' ' * unit_width)
index += 1
if index >= length:
return
width //= 2 #居中打印宽度减半
print()
print_tree(list(range(29)))