Cod sursa(job #1053940)

Utilizator cioionutFMI Ionut Ciocoiu cioionut Data 13 decembrie 2013 01:28:44
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#define N 500001
#include<iostream>
#include<fstream>
using namespace std;
void insheap(int ans[N],int n,int v)
{
    int p,t;
    n++;
    p=n;
    while(p>1)
    {
        t=p/2;
        if (v<=ans[t]) {ans[p]=v;return;}
            else {ans[p]=ans[t];p=t;}
    }
    ans[1]=v;
}
int delheap(int ans[N],int &n)
{
    int v=ans[1];
    ans[1]=ans[n];
    n--;
    int i=1;
    while(2*i<=n||2*i+1<=n)
    {
        if(ans[2*i]>ans[2*i+1]) {swap(ans[2*i],ans[i]);i=2*i;}
            else {swap(ans[2*i+1],ans[i]);i=2*i+1;}
    }
    return v;
}
void asamb(int a[N],int n)
{
    for(int j=1;j<n;j++)
        insheap(a,j,a[j+1]);
}
void heapsort(int a[N],int n)
{
    asamb(a,n);
    while(n>1) a[n]=delheap(a,n);
}
int main()
{
    ifstream f("heapsort.in");
    ofstream g("heapsort.out");
    int n,i,x,m,a[N];
    f>>n;
     for(i=1;i<=n;i++) f>>a[i];
    heapsort(a,n);
   for(i=1;i<=n;i++) g<<a[i]<<" ";



    f.close();g.close();
    return 0;
}