Cod sursa(job #2002773)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 20 iulie 2017 18:44:04
Problema Sortare prin comparare Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <cstdio>
#include <vector>
#include <utility>

using namespace std;

int vals[500001];
vector<int> sorted;

int n;


void heap_sus(int p){
    if(p == 1)
        return;
    if(vals[p] < vals[p / 2]){
        swap(vals[p], vals[p / 2]);
        heap_sus(p / 2);
    }
}


void heap_jos(int p){
    int new_p = 0;
    if(2 * p <= n && vals[p] > vals[2 * p])
        new_p = 2 * p;
    if((2 * p + 1 <= n && vals[2 * p + 1] < vals[2 * p]) && vals[p] > vals[2 * p + 1])
        new_p = 2 * p + 1;
    if(new_p != 0){
        swap(vals[p], vals[new_p]);
        heap_jos(new_p);
    }
}


int main(){
    FILE *fin, *fout;
    fin = fopen("algsort.in", "r");
    fout = fopen("algsort.out", "w");
    fscanf(fin, "%d", &n);
    for(int i = 1;i <= n;i++)
        fscanf(fin, "%d", &vals[i]);
    sorted.push_back(0);
    while(n > 0){
        for(int i = 1;i <= n;i++){
            heap_jos(i);
            heap_sus(i);
        }
        swap(vals[1], vals[n]);
        sorted.push_back(vals[n]);
        n--;
    }
    for(int i = 1;i < int(sorted.size());i++)
        fprintf(fout, "%d ", sorted[i]);
    fprintf(fout, "\n");
    return 0;
}