Pagini recente » Cod sursa (job #2973276) | Cod sursa (job #929832) | Cod sursa (job #1678778) | Cod sursa (job #395593) | Cod sursa (job #407950)
Cod sursa(job #407950)
//Algoritmul de sortare cu ansamble (heap-uri)
#include<fstream>
#include<math.h>
#define nmax 500001
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
unsigned int a[nmax],n;
void afisare()
{for(unsigned int i=1;i<=n;i++)
fout<<a[i]<<" ";
}
void creare_heap()
{unsigned int i,x;
unsigned int fiu,tata;
fin>>n;
for(i=1;i<=n;i++)
{fin>>x;
fiu=i;
tata=fiu/2;
while(a[tata]<x && tata>=1)
{a[fiu]=a[tata];
fiu=tata;
tata=fiu/2;
}
a[fiu]=x;
}
}
void update_heap(unsigned int i)
{unsigned int tata,fiu,aux;
tata=1;
fiu=2;
while(fiu<=i)
{if(fiu+1<=i && a[fiu+1]>a[fiu])
fiu++;
if(a[tata]<a[fiu])
{aux=a[tata];
a[tata]=a[fiu];
a[fiu]=aux;
tata=fiu;
fiu=2*tata;
}
else break;
}
}
void heap_sort()
{unsigned int i,aux;
for(i=n;i>1;i--)
{aux=a[i];
a[i]=a[1];
a[1]=aux;
update_heap(i-1);
}
}
int main()
{creare_heap();
heap_sort();
afisare();
fin.close();
fout.close();
return 0;
}