#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <time.h>
#include <cmath>
using namespace std;
void heapty (int tab[], int o, int heapsize)
{
int l = 2 * o;
int r = 2 * o;
int largest;
if (l <= heapsize && tab[o] < tab[l])
largest = l;
else
largest = o;
if (r <= heapsize && tab[largest] < tab[r])
largest = r;
if (largest != o)
{
swap(tab[o], tab[largest]);
heapty(tab, largest, heapsize);
}
}
void build_heap(int tab[], int heapsize)
{
for (int i = heapsize/2; i >= 0; i--)
heapty(tab, i, heapsize);
}
void heap_sort(int tab[], int size)
{
int heapsize = size;
build_heap(tab, heapsize);
do {
swap(tab[0], tab[heapsize]);
heapsize--;
heapty(tab, 0, heapsize);
} while (heapsize > 0);
}
int main()
{
const int d = 10;
int tab2[d] = { 23, 45, 23, 11, 24, 65, 931, 11, 2, 40 };
cout << "PRZED SORTOWANIEM:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
cout << endl;
heap_sort(tab2, d);
cout << "PO SORTOWANIU:" << endl << endl;
for (int i = 0; i < d; i++) // wypisanie posortowanej tablicy
cout << "tab[" << i << "] = " << tab2[i] << endl;
system("pause");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxjbWF0aD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgaGVhcHR5IChpbnQgdGFiW10sIGludCBvLCBpbnQgaGVhcHNpemUpCnsKCglpbnQgbCA9IDIgKiBvOwoJaW50IHIgPSAyICogbzsKCWludCBsYXJnZXN0OwoKCWlmIChsIDw9IGhlYXBzaXplICYmIHRhYltvXSA8IHRhYltsXSkKCQlsYXJnZXN0ID0gbDsKCWVsc2UKCQlsYXJnZXN0ID0gbzsKCglpZiAociA8PSBoZWFwc2l6ZSAmJiB0YWJbbGFyZ2VzdF0gPCB0YWJbcl0pCgkJbGFyZ2VzdCA9IHI7CgoJaWYgKGxhcmdlc3QgIT0gbykKCXsKCQlzd2FwKHRhYltvXSwgdGFiW2xhcmdlc3RdKTsKCQloZWFwdHkodGFiLCBsYXJnZXN0LCBoZWFwc2l6ZSk7Cgl9Cn0KCnZvaWQgYnVpbGRfaGVhcChpbnQgdGFiW10sIGludCBoZWFwc2l6ZSkKewoJZm9yIChpbnQgaSA9IGhlYXBzaXplLzI7IGkgPj0gMDsgaS0tKQoJCWhlYXB0eSh0YWIsIGksIGhlYXBzaXplKTsKfQoKdm9pZCBoZWFwX3NvcnQoaW50IHRhYltdLCBpbnQgc2l6ZSkKewoJaW50IGhlYXBzaXplID0gc2l6ZTsKCWJ1aWxkX2hlYXAodGFiLCBoZWFwc2l6ZSk7CgoJZG8gewoJCXN3YXAodGFiWzBdLCB0YWJbaGVhcHNpemVdKTsKCQloZWFwc2l6ZS0tOwoJCWhlYXB0eSh0YWIsIDAsIGhlYXBzaXplKTsKCX0gd2hpbGUgKGhlYXBzaXplID4gMCk7Cn0KCmludCBtYWluKCkKewoJY29uc3QgaW50IGQgPSAxMDsKCWludCB0YWIyW2RdID0geyAyMywgNDUsIDIzLCAxMSwgMjQsIDY1LCA5MzEsIDExLCAyLCA0MCB9OwoKCWNvdXQgPDwgIlBSWkVEIFNPUlRPV0FOSUVNOiIgPDwgZW5kbCA8PCBlbmRsOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBkOyBpKyspIC8vIHd5cGlzYW5pZSBwb3NvcnRvd2FuZWogdGFibGljeQoJCWNvdXQgPDwgInRhYlsiIDw8IGkgPDwgIl0gPSAiIDw8IHRhYjJbaV0gPDwgZW5kbDsKCWNvdXQgPDwgZW5kbDsKCgloZWFwX3NvcnQodGFiMiwgZCk7CgoJY291dCA8PCAiUE8gU09SVE9XQU5JVToiIDw8IGVuZGwgPDwgZW5kbDsKCWZvciAoaW50IGkgPSAwOyBpIDwgZDsgaSsrKSAvLyB3eXBpc2FuaWUgcG9zb3J0b3dhbmVqIHRhYmxpY3kKCQljb3V0IDw8ICJ0YWJbIiA8PCBpIDw8ICJdID0gIiA8PCB0YWIyW2ldIDw8IGVuZGw7CgoJc3lzdGVtKCJwYXVzZSIpOwoKCXJldHVybiAwOwp9