Pagini recente » Cod sursa (job #2160092) | Cod sursa (job #2888005) | Cod sursa (job #813548) | Cod sursa (job #1377874) | Cod sursa (job #1809057)
#include <stdio.h>
#define MAXN 800001
int heap[MAXN],v[MAXN];
int main(){
int n, i, m = 0, aux, j, k;
FILE *f, *g;
f=fopen("algsort.in","r");
g=fopen("algsort.out","w");
fscanf(f,"%d",&n);
for(i = 1;i <= n; ++i)
fscanf(f,"%d",&v[i]);
for(i = n / 2;i >= 1; --i){
j = i;
while((v[j] < v[j * 2] || v[j] < v[j * 2 + 1])){
if(v[j * 2] > v[j * 2 + 1] && j * 2 <= n){
aux = v[j];
v[j] = v[j * 2];
v[j * 2] = aux;
j = j * 2;
}
else
if(j * 2 + 1 <= n)
{
aux = v[j];
v[j] = v[j * 2 + 1];
v[j * 2 + 1] = aux;
j = j * 2 + 1;
}
}
}
m = n;
while(n > 1){
aux = v[1];
v[1] = v[n];
v[n] = aux;
--n;
for(i = n / 2;i >= 1; --i){
j = i;
while((v[j] < v[j * 2] || v[j] < v[j * 2 + 1]) && 2 * j <= n && 2 * j + 1 <= n){
if(v[j * 2] > v[j * 2 + 1] && j * 2 <= n){
aux = v[j];
v[j] = v[j * 2];
v[j * 2] = aux;
j = j * 2;
}
else
if(j * 2 + 1 <= n)
{
aux = v[j];
v[j] = v[j * 2 + 1];
v[j * 2 + 1] = aux;
j = j * 2 + 1;
}
}
}
}
for(i = 1;i <= m; ++i)
fprintf(g,"%d ",v[i]);
return 0;
}