Pagini recente » Cod sursa (job #2140360) | Cod sursa (job #9885) | Cod sursa (job #24471) | Cod sursa (job #629295) | Cod sursa (job #404402)
Cod sursa(job #404402)
#include <stdio.h>
#include <algorithm>
#define Nmax 500005
#define INF (1<<31) - 1
using namespace std;
long n, i, j, aux, N;
long v[Nmax];
void UP (int i){
aux = v[i];
while (v[i/2] < aux){
v[i] = v[i/2];
i = i >> 1;
}
v[i] = aux;
}
void DOWN (int i){
aux = v[i];
while ((aux < v[2*i] || aux < v[2*i + 1]) && (2 * i < n)){
if (v[2*i] > v[2*i + 1])
j = 2*i;
else
j = 2*i + 1;
v[i] = v[j];
i = j;
}
v[i] = aux;
}
void HEAPSORT(){
while (n-2){
aux = v[1];
v[1] = v[n];
v[n] = aux;
n--;
i = 1;
if (v[i] < v[2*i] || v[i] < v[2*i + 1]){
DOWN(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]);
if (v[i/2] < v[i])
UP(i);
}
HEAPSORT();
for (i = 1 ; i <= N ; i++)
fprintf(g, "%ld ", v[i]);
fclose(f);
fclose(g);
return 0;
}