Pagini recente » Cod sursa (job #2878803) | Cod sursa (job #539228) | Cod sursa (job #1610292) | Cod sursa (job #2911719) | Cod sursa (job #1174251)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 500000
int n, v[MAXN+1];
inline void cadere(int poz){
int f, fiu1, fiu2, q, aux;
f=1;
while(f==1){
fiu1=(poz<<1)+1;
fiu2=(poz<<1)+2;
q=MAXN;
if(fiu2<n){
q=fiu2;
}
if((fiu1<n)&&(v[q]<v[fiu1])){
q=fiu1;
}
if(v[q]>v[poz]){
aux=v[poz];
v[poz]=v[q];
v[q]=aux;
}else{
f=0;
}
}
}
inline void heapify(){
int i;
for(i=(n-1)>>1; i>=0; i--){
cadere(i);
}
}
inline void heapSort(){
int aux;
while(n>0){
n--;
aux=v[n];
v[n]=v[0];
v[0]=aux;
cadere(0);
}
}
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();
n=i;
for(i=0; i<n; i++){
fprintf(fout, "%d ", v[i]);
}
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}