Pagini recente » Cod sursa (job #838652) | Cod sursa (job #2675552) | Cod sursa (job #1517720) | Cod sursa (job #2869863) | Cod sursa (job #405997)
Cod sursa(job #405997)
#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 >= 1 ; ){
aux = v[1];
v[1] = v[n];
v[n] = aux;
n--;
DOWN(1);
}
/*
if (v[1] > v[2]){
aux = v[1];
v[1] = v[2];
v[2] = aux;
}
*/
for (i = 1 ; i <= N ; i++)
fprintf(g, "%ld ", v[i]);
fclose(f);
fclose(g);
return 0;
}