Pagini recente » Cod sursa (job #1316548) | Cod sursa (job #2885931) | Cod sursa (job #2474916) | Cod sursa (job #3289904) | Cod sursa (job #393321)
Cod sursa(job #393321)
#include <stdio.h>
#define Nmax 500020
int v[Nmax], n, i, t, c, aux;
void up(int i) {
//c - copil, t - tata
int c, t, aux;
c = i, t = i / 2, aux = v[i];
while (t >= 1 && aux > v[t]) {
v[c] = v[t];
c = t, t /= 2;
}
v[c] = aux;
}
int main() {
FILE *f = fopen("algsort.in", "r");
FILE *g = fopen("algsort.out", "w");
fscanf(f, "%d", &n);
for (i = 1; i <= n; i++)
fscanf(f, "%d", &v[i]);
//creez heap
for (i = 2; i <= n; i++)
up(i);
//sortez
for (i = n; i >= 2; i--) {
//pun ultimul element in varf si primul ramane la sfarsit
aux = v[1], v[1] = v[i], v[i] = aux;
//corectez heap cu i-1 elemente
t = 1;
while (2 * t <= i - 1) {
c = 2 * t;
if (2 * t + 1 <= i - 1 && v[2 * t + 1] > v[2 * t])
c = 2 * t + 1;
if (v[t] < v[c])
aux = v[t], v[t] = v[c], v[c] = aux;
else
break;
t = c;
}
}
for (i = 1; i <= n; i++)
fprintf(g, "%d ", v[i]);
fclose(g); fclose(g);
return 0;
}