Files
uni/ws2019/ipi/uebungen/cpp_headers/Heapsort.cc
T

26 lines
544 B
C++

template <class C>
inline void reheap (C& a, int n, int i) {
while (2*i+1<n)
{
int l = 2*i+1;
int r = l+1;
int k = ((r<n) && (a[r]>a[l])) ? r : l;
if (a[k]<=a[i]) break;
std::swap(a[k], a[i]);
i = k;
}
}
template <class C>
void heapsort (C& a)
{
// build the heap by reheaping from the rear
for (int i=a.size()-1; i>=0; i--)
reheap(a, a.size(), i);
// build the sorted list by popping the heap
for (int i=a.size()-1; i>=0; i--) {
std::swap(a[0],a[i]);
reheap(a, i, 0);
}
}