
二叉堆(最大堆)之堆排序
【代码】添加如下构造函数即可
//只需要在之前的堆排序中添加一个这样的构造函数即可
MaxHeap(Item arr[], int n)
{
data = new Item[n + 1];
capacity = n;
for(int i = 0; i < n; i++)
{
data[i + 1] = arr[i];
}
count = n;
//从第一个非叶子节点开始
for(int i = count / 2; i >= 1; i--)
{
shiftDown(i);
}
}
【测试】
template<typename T>
void heapSort2(T arr[], int n)
{
MaxHeap<int> maxheap = MaxHeap<int>(arr, n);
for(int i = n - 1; i >= 0; i--)
{
arr[i] = maxheap.extractMax();
}
}
【运行结果】使用堆化比将元素一个一个加入堆中的效率更高

本文介绍了一种通过二叉堆(最大堆)实现的堆排序算法优化方法。通过直接构建最大堆而非逐个元素插入,显著提升了排序效率。文章提供了具体的构造函数和排序函数代码实现,并对比了不同方式的效率。

715

被折叠的 条评论
为什么被折叠?



