Sortowanie przez kopcowanie

From Nasza Pasja - Programowanie

(Przekierowano z Heapsort)

Implementacja w C++

Program pobiera dane ze standardowego wejścia i wypisuje je na standardowe wyjście.

Pierwszą liczbą na wejściu powinna być liczba dancyh do posortowania. Następnie liczby które mają być posortowane.

Przykład

Dla wejścia:

4
43554
3
5453
545

Program zwróci:

3
545
5453
43554

Kod źródłowy


// Autor: Kacper Ciesla (comboy)
// Licencja: Rob z tym co chcesz, notke o autorze tez mozesz usunac

#include <iostream>

using namespace std;

int tab[101];
int rozmiar;

void heapify(int n)
{

        int lewy = n*2;
        int prawy = n*2+1;
        int max=n;

        if (lewy<=rozmiar && tab[lewy]>tab[max])
        max = lewy;

        if (prawy<=rozmiar && tab[prawy]>tab[max])
        max = prawy;

        if (max!=n)
        {
                int temp;
                temp = tab[n];
                tab[n] = tab[max];
                tab[max] = temp;
                heapify(max);
        }
}

int main()
{

        int n;

        cin >> n;
        rozmiar = n;
        for (int i=1; i<=n; i++)
        {
                cin >> tab[i];
        }

        for (int i=n/2; i>0; i--)
        {
                heapify(i);
        }

        for (int i=1; i<=n; i++)
        {
                int temp;
                temp = tab[1];
                tab[1] = tab[rozmiar];
                tab[rozmiar] = temp;
                rozmiar--;
                heapify(1);
        }

        for (int i=1; i<=n; i++)
        {
                cout << tab[i] << endl;
        }

}