Cod sursa(job #1042472)

Utilizator vlad.florescu94FMI Florescu Vlad - Adrian vlad.florescu94 Data 27 noiembrie 2013 02:37:46
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int heap[500001],i,j,nr,n,mini;
bool ok;
int minm(int a,int b)
{
    if(heap[a]<heap[b])
        return a;
    return b;
}
int main()
{
    f>>n;
    f>>heap[1];
    for(i=2;i<=n;i++)
    {
        f>>heap[i]; j=i;
        while(heap[j]<heap[j/2]&&j>1)
          {swap(heap[j],heap[j/2]);j/=2;}
    }
 //  for(i=1;i<=n;i++)
 //    g<<heap[i]<<" ";
  //g<<'\n';
    while(n>=2)
   {
       ok=1;i=1;
       g<<heap[1]<<" ";
       heap[1]=heap[n];n--;
       while(i*2+1<=n)
        {
           mini=minm(i*2,i*2+1);
           if(heap[i]>heap[mini])
            {swap(heap[i],heap[mini]);i=mini;}
           else
            {ok=0;break;}
        }
       if(ok)
         if(i*2==n)
          {
            if(heap[i]>heap[i*2])
                swap(heap[i],heap[i*2]);
          }
   }
   g<<heap[1]<<" ";
   f.close();g.close();
   return 0;
}