Pagini recente » Cod sursa (job #1109810) | Cod sursa (job #319371) | Cod sursa (job #2195817) | Cod sursa (job #2545223) | Cod sursa (job #244657)
Cod sursa(job #244657)
#include <iostream>
#define NMAX 500005
using namespace std;
FILE *f = fopen("algsort.in", "r"), *g = fopen("algsort.out", "w");
int a[NMAX], N;
int addHeap(int k, int x)
{
a[k] = x;
while (a[k] < a[(k - 1) / 2])
{
int aux = a[k];
a[k] = a[(k - 1) / 2];
a[(k - 1) / 2] = aux;
k = (k - 1) / 2;
}
return 0;
}
int removeHeap(int k)
{
a[0] = a[N - k - 1];
int i = 0;
/*
while ((a[i] > a[2 * i +1]) || (a[i] > a[2 * i + 2]))
{
if (a[i] > a[2 * i + 1])
{
int aux = a[i];
a[i] = a[2 * i + 1];
a[2 * i + 1] = aux;
i = 2 * i + 1;
}
else
{
int aux = a[i];
a[i] = a[2 * i + 2];
a[2 * i + 2] = aux;
i = 2 * i + 2;
}
}
*/
while ((2 * i + 2 <= N - k - 2) && ((a[i] > a[2 * i + 1]) || (a[i] > a[2 * i + 2])))
{
if ((a[i] > a[2 * i + 1]) && (a[i] > a[2 * i + 2]))
{
if (a[2 * i + 1] > a[2 * i + 2])
{
int aux = a[i];
a[i] = a[2 * i + 2];
a[2 * i + 2] = aux;
i = 2 * i + 2;
}
else
{
int aux = a[i];
a[i] = a[2 * i + 1];
a[2 * i + 1] = aux;
i = 2 * i + 1;
}
}
else
{
if (a[i] > a[2 * i + 1])
{
int aux = a[i];
a[i] = a[2 * i + 1];
a[2 * i + 1] = aux;
i = 2 * i + 1;
}
else
{
int aux = a[i];
a[i] = a[2 * i + 2];
a[2 * i + 2] = aux;
i = 2 * i + 2;
}
}
}
if ((2 * i + 1 <= N - k - 2) && (a[i] > a[2 * i + 1]))
{
int aux = a[i];
a[i] = a[2 * i + 1];
a[2 * i + 1] = aux;
i = 2 * i + 1;
}
return 0;
}
int main()
{
fscanf(f, "%d", &N);
for (int i = 0; i < N; ++i)
{
int x;
fscanf(f, "%d", &x);
addHeap(i, x);
}
fclose(f);
/*
for (int i = 0; i < N; ++i)
printf("%d ", a[i]);
printf("\n");
*/
for (int i = 0; i < N; ++i)
{
fprintf(g, "%d ", a[0]);
removeHeap(i);
/*
for (int j = 0; j < N - i - 1; ++j)
printf("%d ", a[j]);
printf("\n");
*/
}
fclose(g);
return 0;
}