void
adjustdown(int
a[],
int
root,
int
size)
{
int
left =
root
* 2 + 1;
int
right = left + 1;
int
key = left;
while
(left<size)
{
if
(right<size&&a[left]<a[right])
{
key = right;
}
if
(a[key]>a[root])
{
swap(a[root],
a[key]);
root
= key;
left =
root
* 2 + 1;
right = left + 1;
key = left;
}
else
{
break;
}
}
}
void
Heapsort(int
a[],
int
size)
{
int
begin =
size
/ 2 - 1;
for
(; begin>=0; begin--)
{
adjustdown(a,
begin,
size);
}
int
end =
size
- 1;
while
(end)
{
swap(a[0],
a[end]);
adjustdown(a,
0, end);
end--;
}
}