Pagini recente » Cod sursa (job #2855176) | Cod sursa (job #1083156) | Cod sursa (job #1940403) | Cod sursa (job #760329) | Cod sursa (job #405166)
Cod sursa(job #405166)
#include <stdio.h>
#define Nmax 500005
#define INF (1<<31) - 1
long n, i, j, aux, N, c;
long v[Nmax];
void UP (int i){
aux = v[i];
while (v[i>>1] < aux){
v[i] = v[i>>1];
i = i >> 1;
}
v[i] = aux;
}
void DOWN (int i){
aux = v[i];
c = 2 * i;
while (c < n){
if (v[c + 1] > v[c] && (c + 1) <= n)
j = c + 1;
else
j = c;
if (v[i] < v[j]){
aux = v[i];
v[i] = v[j];
v[j] = aux;
}
else
break;
i = j;
c = 2 * i;
}
}
int main (){
FILE * f = fopen ("algsort.in", "r");
FILE * g = fopen ("algsort.out", "w");
v[0] = INF;
fscanf (f, "%ld", &n);
N = n;
for (i = 1 ; i <= n ; i++){
fscanf (f, "%ld", &v[i]);
UP(i);
}
for (n ; n >= 2 ; ){
aux = v[1];
v[1] = v[n];
v[n] = aux;
n--;
DOWN(1);
}
for (i = 1 ; i <= N ; i++)
fprintf(g, "%ld ", v[i]);
fclose(f);
fclose(g);
return 0;
}