Pagini recente » Cod sursa (job #1565709) | Cod sursa (job #2332847) | Cod sursa (job #495517) | Cod sursa (job #3149590) | Cod sursa (job #1459948)
#include <fstream>
using namespace std;
inline int Parent(int i){
return i / 2;
}
inline int Left(int i){
return 2 * i;
}
inline int Right(int i){
return 2 * i + 1;
}
inline void Interschimba(int &a, int &b){
int c;
c = a;
a = b;
b = c;
}
void MaxHeapify(int *a, int i, int n){
int r, l, largest;
l = Left(i);
r = Right(i);
if (l <= n && a[l] > a[i])
largest = l;
else
largest = i;
if (r <= n && a[r] > a[largest])
largest = r;
if (largest != i){
Interschimba(a[i], a[largest]);
MaxHeapify(a, largest, n);
}
}
void BuildMaxHeap(int *a, int n){
for (int i = n / 2; i >= 1; i--)
MaxHeapify(a, i, n);
}
void HeapSort(int *a, int n){
int heapSize = n;
BuildMaxHeap(a, n);
for (int i = n; i >= 2; i--){
Interschimba(a[1], a[i]);
heapSize--;
MaxHeapify(a, 1, heapSize);
}
}
int main(){
ifstream in("algsort.in");
ofstream out("algsort.out");
const int NMAX = 500005;
int n, *a = new int[NMAX];
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] << " ";
delete[]a;
return 0;
}