Pagini recente » Cod sursa (job #182168) | Cod sursa (job #1470072) | Cod sursa (job #934247) | Cod sursa (job #1124029) | Cod sursa (job #337790)
Cod sursa(job #337790)
#include <fstream>
#include <cstdlib>
#include <algorithm>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
void swap(int &x, int &y)
{
int tmp = x;
x = y;
y = tmp;
}
void Down(int A[], int poz, int N)
{
int FiuSt, FiuDr, Schimb;
while ( 2*poz <= N )
{
FiuSt = 2*poz;
FiuDr = 2*poz + 1;
Schimb = FiuSt;
if ( FiuDr <= N )
if ( A[FiuDr] > A[Schimb] )
Schimb = FiuDr;
if ( A[Schimb] > A[poz] )
{
swap(A[Schimb], A[poz]);
poz = Schimb;
}
else
break;
}
}
void go(int A[], int N)
{
for ( int i = N / 2; i >= 1; --i )
Down(A, i, N);
}
void Heapsort(int A[], int N)
{
go(A, N);
for ( int i = N; i >= 1; --i )
{
swap(A[i], A[1]);
Down(A, 1, i - 1);
}
}
int A[500020];
int main()
{
int n;
srand((unsigned)time(0));
in >> n;
for ( int i = 1; i <= n; ++i )
in >> A[i];
Heapsort(A, n);
for ( int i = 1; i <= n; ++i )
out << A[i] << " ";
return 0;
}