Pagini recente » Cod sursa (job #2398522) | Cod sursa (job #2642988) | Cod sursa (job #1558405) | Cod sursa (job #81834) | Cod sursa (job #302939)
Cod sursa(job #302939)
#include <stdio.h>
#define MAXN 500005
FILE * fin = fopen("algsort.in", "r");
FILE * fout = fopen("algsort.out","w");
long long n, v[MAXN], N;
void adauga_in_heap(int x,int i){
while(i > 1)
if(v[i] >= v[i>>1]){ v[i]^=v[(i>>1)]^=v[i]^=v[i>>1]; i>>=2;}
else i = 1;
}
int extract(){
int x = v[1],i,j;
v[1] = v[n];
n--; i = 1;
while(i<=n)
if(i<<1 <= n){
j = i<<1;
if(j+1<=n && v[j+1] >= v[j]) j++;
if(v[i] <= v[j]){ v[j]^=v[i]^=v[j]^=v[i]; i = j;}
else i = n+1;
} else i = n+1;
return x;
}
void citire(){
fscanf(fin, "%d", &n);
N = n;
fscanf(fin, "%d", &v[1]);
for(int i=2; i<=n; ++i){
fscanf(fin, "%d", &v[i]);
adauga_in_heap(v[i],i);
}
}
void heap_sort(){
for(int i=n; i>1; --i) v[i] = extract();
}
void afisare(){
for(int i=1; i<=N; ++i) fprintf(fout, "%d ", v[i]);
}
int main(){
citire();
heap_sort();
afisare();
return 0;
}