Pagini recente » Cod sursa (job #1586785) | Cod sursa (job #1142717) | Cod sursa (job #2867842) | Cod sursa (job #2716773) | Cod sursa (job #587393)
Cod sursa(job #587393)
#include <stdio.h>
#include <fstream.h>
ifstream fin("algsort.in");
FILE *g=fopen ("algsort.out", "w");
int n,i,v[500001];
void swap (int &a, int &b)
{
a=a^b;
b=a^b;
a=a^b;
}
void downheap(int n, int k) {
int fiu;
do
{
fiu=0;
if (2*k<=n) fiu=2*k;
if (2*k+1<=n && v[2*k]<v[2*k+1]) fiu=2*k+1;
if (v[fiu]<=v[k]) fiu=0;
if (fiu)
{
swap(v[k], v[fiu]);
k=fiu;
}
}
while (fiu);
}
void build_heap(int n)
{
for (int i=n/2;i>=1;i--)
downheap(n, i);
}
void heap_sort(int n) {
build_heap(n);
for (int i=n;i>=2;i--)
{
swap(v[i], v[1]);
downheap(i-1, 1);
}
}
int main() {
fin>>n;
for (int i=1;i<=n;i++)
fin>>v[i];
heap_sort(n);
for (int i=1;i<=n;i++)
fprintf (g, "%d ", v[i]);
return 0;
}