Heapify将数组构造成堆:从第一个非叶子节点开始,即count/2使用shiftdown
直接输入数组的方式构造堆,其复杂度为O(n);
将n个元素挨个插入空堆来构造堆,复杂度是O(nlogn)
#include <iostream>
#include <algorithm>
using namespace std;
/*
Heapify将数组构造成堆:从第一个非叶子节点开始,即count/2使用shiftdown
直接输入数组的方式构造堆,其复杂度为O(n);
将n个元素挨个插入空堆来构造堆,复杂度是O(nlogn)
当容量不足时记得开辟新的空间(以下代码没写)
*/
templete<typename T>
void heapSort(T arr[],int n){
MaxHeap<T> maxheap = MaxHeap<T>(arr, n);
for(int i = n-1;i >= 0 ; i--){
arr[i] = maxheap.extractMax();
}
}
template<typename Item>
class MaxHeap{
private:
Item* data;
int count;
void shiftDown(int k){
while(2*k <= count){
int j = 2*k;
if(j + 1 <= count && data[j+1] > data[j] ){/