Cod sursa(job #1844608)

Utilizator Walrus21andrei Walrus21 Data 10 ianuarie 2017 09:40:24
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <vector>
#define N 200001

using namespace std;

int i, n, H[N];

void sift(int k)
{
    int s = 1;
    while (s)
    {
        s = 0;
        if(2 * k <= n)
        {
            s = 2 * k;
            if(s + 1 <= n && H[s + 1] < H[s])
                s++;
            if(H[s] >= H[k])
                s = 0;
        }
        if(s)
        {
            swap(H[k], H[s]);
            k = s;
        }
    }
}

int main()
{
    freopen("algsort.in", "r", stdin);
    freopen("algsort.out", "w", stdout);
    scanf("%d", &n);
    for(i = 1; i <= n; i++)
        scanf("%d", &H[i]);
    for(i = n / 2; i; i--)
        sift(i);
    while(n)
    {
        printf("%d ", H[1]);
        H[1] = H[n--];
        sift(1);
    }
    return 0;
}