Cod sursa(job #2704513)

Utilizator mihnea.anghelMihnea Anghel mihnea.anghel Data 10 februarie 2021 18:22:45
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
/// de fapt hepsort

#include <fstream>
#define f in
#define g out

using namespace std;
ifstream in ( "algsort.in" );
ofstream out( "algsort.out" );
int n, i, crt, tata, v[500500];

int main() {
    f>>n;
    for ( i=1; i <= n; i++ )
        f>>v[i];
    for ( i=2; i <= n; i++ ){
        crt = i;
        tata = i/2;
        while ( tata >= 1 && v[crt] > v[tata] ) {
            swap(v[crt], v[tata]);
            crt = tata;
            tata /= 2;
        }
    }
    for ( i=n; i > 1; i-- ){
        swap(v[i], v[1]);
        crt = 2;
        tata = 1;
        while ( crt <= i-1 ) {
            if ( crt+1 <= i-1 && v[crt+1] > v[crt] )
                crt++;
            if ( v[tata] < v[crt] )
                swap(v[tata], v[crt]);
            else break;
            tata = crt;
            crt = 2*crt;
        }
    }
    for ( i=1; i <= n; i++ )
        g<<v[i]<<" ";
    return 0;
}