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