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--;
}
}