Cod sursa(job #2416311)

Utilizator carriedawayIoana Dragos carriedaway Data 27 aprilie 2019 12:49:05
Problema Sortare prin comparare Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int A[200];
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]);
	return 0;
}