Pagini recente » Cod sursa (job #1955197) | Cod sursa (job #2969521) | Cod sursa (job #2225017) | Cod sursa (job #2497920) | Cod sursa (job #1335576)
#include <stdio.h>
#define MAXN 500000
int v[MAXN], n;
inline int tata(int p){
return (p-1)>>1;
}
inline int fiust(int p){
return (p<<1)+1;
}
inline int fiudr(int p){
return (p<<1)+2;
}
inline void swap(int a, int b){
int aux=v[a];
v[a]=v[b];
v[b]=aux;
}
inline void coborare(int p){
int f=1, q;
while((f==1)&&(fiust(p)<n)){
q=fiust(p);
if((fiudr(p)<n)&&(v[fiudr(p)]>v[q])){
q=fiudr(p);
}
if(v[q]>v[p]){
swap(p, q);
p=q;
}else{
f=0;
}
}
}
inline void heapify(){
int i;
for(i=tata(n-1); i>=0; i--){
coborare(i);
}
}
inline void heapSort(){
int cn=n;
while(n>1){
n--;
swap(0, n);
coborare(0);
}
n=cn;
}
int main(){
int i;
FILE *fin, *fout;
fin=fopen("algsort.in", "r");
fout=fopen("algsort.out", "w");
fscanf(fin, "%d", &n);
for(i=0; i<n; i++){
fscanf(fin, "%d", &v[i]);
}
heapify();
heapSort();
for(i=0; i<n-1; i++){
fprintf(fout, "%d ", v[i]);
}
fprintf(fout, "%d\n", v[i]);
fclose(fin);
fclose(fout);
return 0;
}