#include <iostream>
#include <algorithm>
using namespace std;
void show(int a)
{
cout << a <<" ";
}
template <class T>
void my_swap(T &a, T &b)
{
T t = a;
a = b;
b = t;
}
// heap down
void heap_down(int a[], int k, int N)
{
while(2*k+1 < N)
{
int child = 2*k+1;
if (child < N-1 && a[child] < a[child+1]) child++;
if (a[child] < a[k]) break;
my_swap(a[child], a[k]);
k = child;
}
}
void heap_sort(int a[], int len)
{
// create heap
for (int k = len/2-1; k>=0; --k)
heap_down(a, k, len);
// heap down
for (int i = len-1; i >= 1; --i)
{
my_swap(a[0], a[i]);
heap_down(a, 0, i);
}
}
int main(int argc, char* argv[])
{
int a[5] = {18,3,2,5,9};
heap_sort(a, 5);
for_each(a, a+5, show);
cout << endl;
return 0;
}
堆排序
最新推荐文章于 2022-12-01 07:50:10 发布