Cod sursa(job #1516966)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 3 noiembrie 2015 19:07:08
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 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[k], v[child]);
          k=child;
          }
        else
			break;

    }
}
void heapsort (int v[500002] , int n )
{//aici "elimin" cel mai mare termen
    for (int k=n/2;k>=0;--k)
    {
        shiftdown(v , k , n);
    }
    while (n-1)
    {
        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]<<" ";
    }
}