Cod sursa(job #2002914)

Utilizator caesar2001Stoica Alexandru caesar2001 Data 21 iulie 2017 11:01:45
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>

FILE *in,*out;

using namespace std;

const int NMAX = 500000;

int v[1+NMAX],f[1+NMAX],sizeheap,heap[1+NMAX];

void swap(int a,int b)
{
    int tmp;
    tmp = heap[a];
    heap[a] = heap[b];
    heap[b] = tmp;
    tmp = f[heap[a]];
    f[heap[a]] = f[heap[b]];
    f[heap[b]] = tmp;
}

void urca(int p)
{
    if(p == 1)
        return;
    else
    {
        if(v[heap[p]] < v[heap[p/2]])
        {
            swap(p,p/2);
            urca(p/2);
        }
    }
}

void adauga(int x,int ind)
{
    sizeheap ++;
    heap[sizeheap] = ind;
    f[ind] = sizeheap;
    urca(sizeheap);
}

int main()
{
    in = fopen("algsort.in","r");
    out = fopen("algsort.out","w");
    int n;
    fscanf(in,"%d",&n);
    for(int i = 1;i <= n;i ++)
    {
        fscanf(in,"%d",&v[i]);
        adauga(v[i],i);
    }
    for(int i = 1;i <= n;i ++)
    {
        if(i < n && v[heap[i]] > v[heap[i+1]])
            swap(i,i+1);
        fprintf(out,"%d ",v[heap[i]]);
    }
    return 0;
}