Cod sursa(job #1517020)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 3 noiembrie 2015 19:47:56
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include<fstream>
using namespace std;
void swap (int *a , int *b)
{
    int tmp;
    tmp=*a;
    *a=*b;
    *b=tmp;
}
void shiftdown (int v[500002], int k , int n)// aici iau maximu dintre tata si copii ca pana la urma sa "scot" maximul
{
    while (2*k+1<n)
    {//cat nu am iest din vector
    int child = 2*k+1;
    if ( child+1 < n && (v[child] < v[child+1])) child++;
    if ( v[k] < v[child]) {
    swap (v[child], v[k]);
    k=child;
          }
        else       return;
    }
}
void heapsort (int v[500002] , int n )
{//aici "elimin" cel mai mare termen
    int k;
    for (k=n/2;k>=0;k--)
    {
        shiftdown(v , k , n);
    }
    cout<<v[n-1];
    while (n-1>0)
    {
        swap (v[n-1],v[0]);// "omor" maximul pt a sorta
        shiftdown(v , 0 , n-1);//vad daca radacina e mai mica ca fii
        n--; // scad n ca sa nu scriu peste alte valori
    }
}
int main()
{
    ifstream fin("algsort.in");
    ofstream fout ("algsort.out");
    int n;
    fin>>n;
    int v[n];
    for (int i=0;i<n;++i)
    {
        fin>>v[i];
    }
    heapsort(v , n);
    for (int i=0;i<n;++i)
    {
        fout<<v[i]<<" ";
    }
}