Pagini recente » Borderou de evaluare (job #3206778) | Borderou de evaluare (job #18617) | Borderou de evaluare (job #410126) | Borderou de evaluare (job #1226429) | Cod sursa (job #628743)
Cod sursa(job #628743)
#include<cstdio>
using namespace std;
FILE *in = fopen ("algsort.in", "r"), *out = fopen ("algsort.out", "w");
int a[500001], n;
void Coboara(int i, int n){
int fiu, aux = a[i], gata = 0;
while (i <= n/2 && !gata){
fiu = 2 * i;
if (fiu + 1 <= n && a[fiu+1] > a[fiu]) fiu++;
if (a[fiu] > a[i]){
a[i] = a[fiu];
i = fiu;
}
else gata = 1;
a[i] = aux;
}
}
void MinHeap(){
for (int i = n/2; i >= 1; i--) Coboara(i, n);
}
void HeapSort(){
int i, aux;
for (i = n; i >= 2; i--)
if (a[1] > a[i]){
aux = a[1];
a[1] = a[i];
a[i] = aux;
Coboara (1, i-1);
}
}
int main(){
int i;
fscanf (in, "%d", &n);
for (i = 1; i <= n; i++) fscanf(in, "%d", &a[i]);
MinHeap();
HeapSort();
for (i = 1; i <= n; i++) fprintf(out, "%d ", a[i]);
fprintf (out, "\n");
return 0;
}