Pagini recente » Cod sursa (job #1392181) | Cod sursa (job #2732140) | Istoria paginii runda/oni_2005/clasament | Cod sursa (job #1787529) | Cod sursa (job #2416312)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int A[500000];
int dimVec;
void max_heap(int* A, int i)
{
int l = 2 * i + 1;
int r = 2 * i + 2;
int largest=i;
if (l<dimVec && A[l]>A[largest])
{
largest = l;
}
if (r<dimVec && A[r]>A[largest])
{
largest = r;
}
if (largest != i)
{
int aux = A[i];
A[i] = A[largest];
A[largest] = aux;
max_heap(A, largest);
}
}
void build_max_heap(int *A)
{
for (int i = dimVec / 2 - 1; i >= 0; i--)
{
max_heap(A, i);
}
}
void heapsort(int* A)
{
build_max_heap(A);
int n = dimVec;
for (int i = n-1; i >= 1; --i)
{
int aux = A[0];
A[0] = A[i];
A[i] = aux;
dimVec--;
max_heap(A, 0);
}
dimVec = n;
}
int main()
{
FILE* fin = fopen("algsort.in", "r");
FILE* fout = fopen("algsort.out", "w");
fscanf(fin,"%d", &dimVec);
for (int i = 0; i < dimVec; i++)
{
fscanf(fin,"%d", &A[i]);
}
heapsort(A);
for (int i = 0; i < dimVec; i++)
fprintf(fout, "%d ", A[i]);
fclose(fin);
fclose(fout);
return 0;
}