Problem5797--学习系列——排序——堆排序

5797: 学习系列——排序——堆排序

[Creator : ]
Time Limit : 1.000 sec  Memory Limit : 256 MiB

Description

堆排序的特点是利用了数据结构中的堆。
【排序过程】
1. 建立最大堆
注意:从降序排列的堆中取出数据时会从最大的数据开始取,所以将取出的数据反序输出,排序就完成了。
首先,在堆中存储所有的数据,并按降序来构建堆。

现在,所有数据都存进堆里了。为了排序,需要再从堆中把数据一个个取出来。

2. 取出数据
首先取出根结点的数字7。

重新构造堆。

同样地,取出根结点的数字6,将它放在右数第2 个位置上。

重新构造堆。

重复上述操作直到堆变空为止。

排序中……

从堆中取出了所有数字,排序完成。

堆排序一开始需要将n 个数据存进堆里,所需时间为O(nlogn)。排序过程中,堆从空堆的状态开始,逐渐被数据填满。由于堆的高度小于log2n,所以插入1 个数据所需要的时间为O(logn)。
每轮取出最大的数据并重构堆所需要的时间为O(logn)。由于总共有n 轮,所以重构后排序的时间也是O(nlogn)。因此,整体来看堆排序的时间复杂度为O(nlogn)。

Source/Category