Cod sursa(job #1559085)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 30 decembrie 2015 01:04:18
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <cmath>
#include <vector>
#include <set>
#include <algorithm>
#include <cstring>
#include <map>
#include <iomanip>
#include <time.h>
#include <stdio.h>
//#include <iostream>
using namespace std;
ifstream cin("algsort.in");
ofstream cout("algsort.out");
int x[500004];
void heap(int x[], int val, int poz)
{
    x[poz] = val;
    while(x[poz] <= x[poz / 2] && poz / 2 > 0){
        swap(x[poz], x[poz / 2]);
        poz /= 2;
    }
}
void elim(int &n, int x[], int poz)
{
    swap(x[poz], x[n]);
    n--;
    x[n + 1] = 1<<30;
    while(poz * 2 <= n && (x[poz] >= x[poz * 2] || x[poz] >= x[poz * 2 + 1]))
    {
        if(x[poz * 2] <= x[poz * 2 + 1])
        {
            swap(x[poz], x[poz * 2]);
            poz *= 2;
        }
        else
        {
            swap(x[poz], x[poz * 2 + 1]);
            poz *= 2;
            poz++;
        }
    }
}
int main()
{
    int n, a;
    cin >> n;
    for(int i = 1; i <= 500000; i++)
        x[i] = 1<<30;
    for(int i = 0; i < n; i++)
    {
        cin >> a;
        heap(x, a, i + 1);
    }
    while(n != 0){
        cout << x[1] << " ";
        elim(n, x, 1);
    }
    return 0;
}