一组关键字序列为(50,40,95,20,15,70,60,45,80),采用堆排序方法进行递增排序,建立初始最大值堆
时间: 2023-10-09 19:07:54 浏览: 96
这里是一组关键字序列为(50,40,95,20,15,70,60,45,80)建立初始最大值堆的过程:
1. 首先将整个序列看作一个完全二叉树,根据完全二叉树的性质,从最后一个非叶子节点开始,对每个非叶子节点进行调整,以满足最大堆的性质。
初始状态的完全二叉树如下:
50
/ \
40 95
/ \ / \
20 15 70 60
/ \
45 80
最后一个非叶子节点是节点 2,因此从节点 2 开始进行调整。
2. 对于每个非叶子节点,首先比较其左右子节点的大小,选取较大的子节点与该节点进行比较。如果该节点比其子节点小,则将该节点与较大的子节点交换,并继续向下比较。如果该节点比其子节点大,则调整结束。
对节点 2 进行调整,比较其与左右子节点的大小,发现左子节点的值为 40,右子节点的值为 95,因此将节点 2 与右子节点交换,得到以下结果:
50
/ \
95 40
/ \ / \
20 15 70 60
/ \
45 80
继续对节点 2 进行调整,比较其与左右子节点的大小,发现左子节点的值为 20,右子节点的值为 15,因此将节点 2 与左子节点交换,得到以下结果:
50
/ \
95 80
/ \ / \
20 15 70 60
/ \
45 40
继续对节点 1 进行调整,比较其与左右子节点的大小,发现左子节点的值为 95,右子节点的值为 80,因此将节点 1 与左子节点交换,得到以下结果:
95
/ \
50 80
/ \ / \
20 15 70 60
/ \
45 40
继续对节点 0 进行调整,比较其与左右子节点的大小,发现左子节点的值为 50,右子节点的值为 80,因此将节点 0 与右子节点交换,得到以下结果:
95
/ \
80 50
/ \ / \
20 15 70 60
/ \
45 40
继续对节点 0 进行调整,比较其与左右子节点的大小,发现左子节点的值为 80,右子节点的值为 50,因此将节点 0 与左子节点交换,得到以下结果:
80
/ \
95 50
/ \ / \
20 15 70 60
/ \
45 40
继续对节点 0 进行调整,比较其与左右子节点的大小,发现左子节点的值为 95,右子节点的值为 50,因此将节点 0 与左子节点交换,得到以下结果:
95
/ \
80 50
/ \ / \
20 15 70 60
/ \
45 40
3. 当所有非叶子节点都被调整完成后,整个序列就变成了一个最大堆。此时,将堆顶元素(即序列中的最大值)与序列的最后一个元素交换位置,并将序列的长度减 1。
将 95 与 80 交换位置,得到以下结果:
80
/ \
50 95
/ \ / \
20 15 70 60
/ \
45 40
将序列长度减 1,得到以下序列:
80, 50, 70, 45, 15, 40, 60, 95
4. 重复步骤 1~3,直到序列长度为 1,排序完成。
对于这个序列,重复以上步骤,最终得到以下排序结果:
15, 40, 45, 50, 60, 70, 80, 95
因此,这个序列的递增排序结果为(15, 40, 45, 50, 60, 70, 80, 95)。
阅读全文