堆排序在最差情况下相比快速排序,具有更好的时间复杂度。
template <class T>
void adjust_heap(vector<T> &Vct, int First, int Last)
{
int CurrentPos = First;
int ChildPos = 2 * CurrentPos + 1;
T Temp = Vct[First];

while (ChildPos <= Last-1)
{
if (ChildPos+1 <= Last-1 && Vct[ChildPos] < Vct[ChildPos+1])
ChildPos += 1;

if (Temp < Vct[ChildPos])
{
Vct[CurrentPos] = Vct[ChildPos];
CurrentPos = ChildPos;
ChildPos = 2 * CurrentPos + 1;
}
else
break;
}

Vct[CurrentPos] = Temp;
}

template <class T>
void make_heap(vector<T> &Vct)
{
int LastPos = Vct.size();
int HeapPos = (LastPos - 2) / 2;

while (HeapPos >= 0)
{
adjust_heap(Vct, HeapPos, LastPos);
HeapPos--;
}
}

template <class T>
void heap_sort(vector<T> &Vct)
{
make_heap(Vct);
int n = Vct.size();

for (int i = n; i > 1; i--)
pop_heap(Vct, i);
}














































