Pagini recente » Cod sursa (job #21552) | Cod sursa (job #2126261) | Cod sursa (job #552826) | Cod sursa (job #554122) | Cod sursa (job #1835993)
#include <iostream>
#include<fstream>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
const int MAX_HEAP_SIZE = 16384;
typedef int Heap[MAX_HEAP_SIZE];
inline int father(int nod) {
return nod / 2;
}
inline int left_son(int nod) {
return nod * 2;
}
inline int right_son(int nod) {
return nod * 2 + 1;
}
void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void MaxHeapify(int A[], int n, int i)
{
int largest = i;
int l = 2*i + 1;
int r = 2*i + 2;
if (l < n && A[l] > A[largest])
largest = l;
if (r < n && A[r] > A[largest])
largest = r;
if (largest != i)
{
swap(&A[i], &A[largest]);
MaxHeapify(A, n, largest);
}
}
BuildMaxHeap(int A[], int n)
{
int i;
for (i=(n/2)-1;i>=0;i--){
MaxHeapify(A, n, i);
}
}
void heapSort(int A[], int n)
{
int i;
BuildMaxHeap(A, n);
for (i=n-1; i>=0; i--)
{
swap(&A[0], &A[i]);
int heap_size= i;
MaxHeapify(A, heap_size, 0);
}
}
int main()
{
int A[500001];
int n, i;
fin>>n;
for(i = 0; i < n; i++)
fin>>A[i];
heapSort(A, n);
for(i = 0; i < n; i++)
fout<<A[i]<<" ";
return 0;
}