现有待排序序列{25,84,21,47,15,27,68,35,20},请写出利用堆排序进行排序的过程。
时间: 2024-06-02 13:12:44 浏览: 124
堆排序的基本思想是将待排序序列构建成一个大根堆或小根堆,然后依次取出堆顶元素并重新调整堆,最终得到有序序列。
下面是利用堆排序进行排序的过程:
1. 构建大根堆
将待排序序列构建成大根堆,即每个节点的值都大于其左右子节点的值。从最后一个非叶子节点开始,依次向前调整,保证每个节点都满足堆的性质。
调整前:{25,84,21,47,15,27,68,35,20}
首先从最后一个非叶子节点68开始,调整以68为根节点的子树:
68
/ \
35 27
/ \ / \
25 21 47 15
/ \
84 20
调整后:
68
/ \
35 47
/ \ / \
25 21 27 15
/ \
84 20
再调整以35为根节点的子树:
68
/ \
47 35
/ \ / \
25 21 27 15
/ \
84 20
再调整以25为根节点的子树:
68
/ \
47 35
/ \ / \
84 21 27 15
/ \
25 20
再调整以47为根节点的子树:
84
/ \
47 35
/ \ / \
68 21 27 15
/ \
25 20
调整前半部分结束,继续调整后半部分:
84
/ \
68 35
/ \ / \
47 21 27 15
/ \
25 20
最终得到大根堆:{84,68,35,47,21,27,25,15,20}
2. 排序
取出堆顶元素84,将其放到有序序列的末尾,然后重新调整堆,得到新的大根堆{68,47,35,25,21,27,20,15}。
重复上述过程,直到堆为空。
排序过程:
第一次取出堆顶元素84,得到新的大根堆{68,47,35,25,21,27,20,15},有序序列为{84}。
第二次取出堆顶元素68,得到新的大根堆{47,35,27,25,21,20,15},有序序列为{84,68}。
第三次取出堆顶元素47,得到新的大根堆{35,25,27,15,21,20},有序序列为{84,68,47}。
第四次取出堆顶元素35,得到新的大根堆{27,25,20,15,21},有序序列为{84,68,47,35}。
第五次取出堆顶元素27,得到新的大根堆{25,21,20,15},有序序列为{84,68,47,35,27}。
第六次取出堆顶元素25,得到新的大根堆{21,15,20},有序序列为{84,68,47,35,27,25}。
第七次取出堆顶元素21,得到新的大根堆{20,15},有序序列为{84,68,47,35,27,25,21}。
第八次取出堆顶元素20,得到新的大根堆{15},有序序列为{84,68,47,35,27,25,21,20}。
第九次取出堆顶元素15,得到新的大根堆{},有序序列为{84,68,47,35,27,25,21,20,15}。
最终得到有序序列:{15,20,21,25,27,35,47,68,84}。
阅读全文