====== Heap sort (indexovani od 1) ====== #include #include using namespace std; const int N = 1000; // int a [N+1] = { 0 /* a[0] nepouzivam */, 10, 4, 8, 20, 7, 5, 1 }; int a [N+1]; /* a[0] nepouzivam */ inline void swap (int i, int k) { int t = a [i]; a [i] = a [k]; a [k] = t; } void heapify (int i, int k) { while (2*i <= k) // dokud existuje levy { int v = 2*i; // index leveho if (v+1 <= k) // pokud pravy existuje { if (a [v+1] > a [v]) // pokud pravy je vetsi nez levy v = v + 1; // index vetsiho } if (a [i] < a [v]) // nahore je mensi { // prohodit a[i] <-> a[v] swap (i, v); // int t = a [i]; // a [i] = a [v]; // a [v] = t; i = v; // pokracovat spodnim prvkem } else { i = k+1; // konec } } } void heapSort () { for (int k = N; k >= 1; k--) { heapify (k, N); } swap (1, N); // a[1] <-> a[N], v a[N] je ulozeno maximum for (int k = N-1; k > 1; k--) { heapify (1, k); swap (1, k); } } int main() { srand (time (nullptr)); for (int i = 1; i <= N; i++) a [i] = (rand () % 1000) + 1000 * (rand () % 1000); heapSort (); bool ok = true; for (int i = 1; i <= N; i++) { if (i > 1) { if (a [i-1] > a [i]) { cout << "CHYBA"; ok = false; } } cout << a [i] << endl; } if (ok) { cout << "O.K." << endl; } }