#include <stdio.h>
void siftDown(int numbers[], int root, int bottom);
void heapSort(int numbers[], int array_size)
{
int i, temp;
for (i = (array_size / 2)-1; i >= 0; i--)
siftDown(numbers, i, array_size);
for (i = array_size-1; i >= 1; i--)
{
temp = numbers[0];
numbers[0] = numbers[i];
numbers[i] = temp;
siftDown(numbers, 0, i-1);
}
}
void siftDown(int numbers[], int root, int bottom)
{
int done, maxChild, temp;
done = 0;
while ((root*2 <= bottom) && (!done))
{
if (root*2 == bottom)
maxChild = root * 2;
else if (numbers[root * 2] > numbers[root * 2 + 1])
maxChild = root * 2;
else
maxChild = root * 2 + 1;
if (numbers[root] < numbers[maxChild])
{
temp = numbers[root];
numbers[root] = numbers[maxChild];
numbers[maxChild] = temp;
root = maxChild;
}
else
done = 1;
}
}
int main() {
int a[] = {66,4,23,4,78,6,44,11,22,1,99};
int n = sizeof(a) / sizeof(a[0]);
int i;
heapSort(a, n);
for (i=0; i<n; i++)
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHNpZnREb3duKGludCBudW1iZXJzW10sIGludCByb290LCBpbnQgYm90dG9tKTsKCnZvaWQgaGVhcFNvcnQoaW50IG51bWJlcnNbXSwgaW50IGFycmF5X3NpemUpCiAgICB7CiAgICAgIGludCBpLCB0ZW1wOwoKICAgICAgZm9yIChpID0gKGFycmF5X3NpemUgLyAyKS0xOyBpID49IDA7IGktLSkKICAgICAgICBzaWZ0RG93bihudW1iZXJzLCBpLCBhcnJheV9zaXplKTsKCiAgICAgIGZvciAoaSA9IGFycmF5X3NpemUtMTsgaSA+PSAxOyBpLS0pCiAgICAgIHsKICAgICAgICB0ZW1wID0gbnVtYmVyc1swXTsKICAgICAgICBudW1iZXJzWzBdID0gbnVtYmVyc1tpXTsKICAgICAgICBudW1iZXJzW2ldID0gdGVtcDsKICAgICAgICBzaWZ0RG93bihudW1iZXJzLCAwLCBpLTEpOwogICAgICB9CiAgICB9CgoKICAgIHZvaWQgc2lmdERvd24oaW50IG51bWJlcnNbXSwgaW50IHJvb3QsIGludCBib3R0b20pCiAgICB7CiAgICAgIGludCBkb25lLCBtYXhDaGlsZCwgdGVtcDsKCiAgICAgIGRvbmUgPSAwOwogICAgICB3aGlsZSAoKHJvb3QqMiA8PSBib3R0b20pICYmICghZG9uZSkpCiAgICAgIHsKICAgICAgICBpZiAocm9vdCoyID09IGJvdHRvbSkKICAgICAgICAgIG1heENoaWxkID0gcm9vdCAqIDI7CiAgICAgICAgZWxzZSBpZiAobnVtYmVyc1tyb290ICogMl0gPiBudW1iZXJzW3Jvb3QgKiAyICsgMV0pCiAgICAgICAgICBtYXhDaGlsZCA9IHJvb3QgKiAyOwogICAgICAgIGVsc2UKICAgICAgICAgIG1heENoaWxkID0gcm9vdCAqIDIgKyAxOwoKICAgICAgICBpZiAobnVtYmVyc1tyb290XSA8IG51bWJlcnNbbWF4Q2hpbGRdKQogICAgICAgIHsKICAgICAgICAgIHRlbXAgPSBudW1iZXJzW3Jvb3RdOwogICAgICAgICAgbnVtYmVyc1tyb290XSA9IG51bWJlcnNbbWF4Q2hpbGRdOwogICAgICAgICAgbnVtYmVyc1ttYXhDaGlsZF0gPSB0ZW1wOwogICAgICAgICAgcm9vdCA9IG1heENoaWxkOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBkb25lID0gMTsKICAgICAgfQogICAgfQoKaW50IG1haW4oKSB7CiAgICBpbnQgYVtdID0gezY2LDQsMjMsNCw3OCw2LDQ0LDExLDIyLDEsOTl9OwogICAgaW50IG4gPSBzaXplb2YoYSkgLyBzaXplb2YoYVswXSk7CiAgICBpbnQgaTsKICAgIGhlYXBTb3J0KGEsIG4pOwogICAgZm9yIChpPTA7IGk8bjsgaSsrKQogICAgICAgIHByaW50ZigiJWQgIiwgYVtpXSk7CiAgICByZXR1cm4gMDsKfQo=