//(c)Terminator
#include <stdio.h>
#include <stdlib.h>
// функция восстановления свойства бинарной кучи
void __heapify(int* arr, int i, int cnt) {
int t, l, r, large;
while(1){
l = i*2 + 1;
r = i*2 + 2;
if((l < cnt) && (arr[l] > arr[i]))
large = l;
else
large = i;
if((r < cnt) && (arr[r] > arr[large]))
large = r;
if(large != i){
t = arr[i];
arr[i] = arr[large];
arr[large] = t;
i = large;
} else
break;
}
}
// Пирамидальная сортировка
void heap_sort(int* arr, int cnt){
int t, i;
// в начале из массива делаем make-heap
for(i = cnt/2-1; i >= 0; --i)
__heapify(arr, i, cnt);
//pop_min
for(i = cnt - 1; i >= 0; --i) {
t = arr[0];
arr[0] = arr[i];
arr[i] = t;
__heapify(arr, 0, i);
}
}
int main(void){
int i;
int arr[] = { 100, 9, 5, 8, 1, 2, 6, 7, 4, 3, -100 };
int cnt = sizeof(arr)/sizeof(arr[0]);
heap_sort(arr, cnt);
for(i = 0; i < cnt; ++i)
return 0;
}
Ly8oYylUZXJtaW5hdG9yCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgoKLy8g0YTRg9C90LrRhtC40Y8g0LLQvtGB0YHRgtCw0L3QvtCy0LvQtdC90LjRjyDRgdCy0L7QudGB0YLQstCwINCx0LjQvdCw0YDQvdC+0Lkg0LrRg9GH0LgKdm9pZCAgX19oZWFwaWZ5KGludCogYXJyLCBpbnQgaSwgaW50IGNudCkgewogICAgaW50IHQsIGwsIHIsIGxhcmdlOwoKICAgIHdoaWxlKDEpewogICAgICAgIGwgPSBpKjIgKyAxOwogICAgICAgIHIgPSBpKjIgKyAyOwogICAgICAgIGlmKChsIDwgY250KSAmJiAoYXJyW2xdID4gYXJyW2ldKSkKICAgICAgICAgICAgbGFyZ2UgPSBsOwogICAgICAgIGVsc2UKICAgICAgICAgICAgbGFyZ2UgPSBpOwoKICAgICAgICBpZigociA8IGNudCkgJiYgKGFycltyXSA+IGFycltsYXJnZV0pKQogICAgICAgICAgICBsYXJnZSA9IHI7CgogICAgICAgIGlmKGxhcmdlICE9IGkpewogICAgICAgICAgICB0ICAgICAgICAgID0gYXJyW2ldOwogICAgICAgICAgICBhcnJbaV0gICAgID0gYXJyW2xhcmdlXTsKICAgICAgICAgICAgYXJyW2xhcmdlXSA9IHQ7CgogICAgICAgICAgICBpID0gbGFyZ2U7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgoKLy8g0J/QuNGA0LDQvNC40LTQsNC70YzQvdCw0Y8g0YHQvtGA0YLQuNGA0L7QstC60LAKdm9pZCBoZWFwX3NvcnQoaW50KiBhcnIsIGludCBjbnQpewogICAgaW50IHQsIGk7CiAgICAvLyDQsiDQvdCw0YfQsNC70LUg0LjQtyDQvNCw0YHRgdC40LLQsCDQtNC10LvQsNC10LwgbWFrZS1oZWFwCiAgICBmb3IoaSA9IGNudC8yLTE7IGkgPj0gMDsgLS1pKQogICAgICAgIF9faGVhcGlmeShhcnIsIGksIGNudCk7CgogICAgLy9wb3BfbWluCiAgICBmb3IoaSA9IGNudCAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgdCAgICAgID0gYXJyWzBdOwogICAgICAgIGFyclswXSA9IGFycltpXTsKICAgICAgICBhcnJbaV0gPSB0OwogICAgICAgIF9faGVhcGlmeShhcnIsIDAsIGkpOwogICAgfQp9CgoKaW50IG1haW4odm9pZCl7CiAgICBpbnQgaTsKICAgIGludCBhcnJbXSA9IHsgMTAwLCA5LCA1LCA4LCAxLCAyLCA2LCA3LCA0LCAzLCAtMTAwIH07CiAgICBpbnQgY250ICAgPSBzaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKCiAgICBoZWFwX3NvcnQoYXJyLCBjbnQpOwoKICAgIGZvcihpID0gMDsgaSA8IGNudDsgKytpKQogICAgICAgIHByaW50ZigiJWQgIiwgYXJyW2ldKTsKICAgIHJldHVybiAwOwp9