Pagini recente » Cod sursa (job #515827) | Cod sursa (job #2168246) | Cod sursa (job #2523032) | Cod sursa (job #1323990) | Cod sursa (job #1486536)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#define FIN "algsort.in"
#define FOUT "algsort.out"
#define push push_back
#define DIM 500005
class Container {
public:
//constructor
Container(int _N): N(_N){};
//destructor
~Container(){};
void add_to_container(int elem) {
vec.push( elem );
};
void HeapSort() {
for(int i = 0; i < N; ++i) {
insertHeap( vec[ i ] );
}
_HeapSort();
};
private:
std::vector<int> vec;
int N;
int sizeHeap, Heap[ DIM ];
void insertHeap(int elem) {
Heap[ ++sizeHeap ] = elem;
up( sizeHeap );
}
void up(int child) {
int parrent = child / 2;
while( parrent ) {
if(Heap[ parrent ] > Heap[ child ]) {
swap(parrent, child);
child = parrent;
parrent = child / 2;
} else break;
}
}
void down(int parrent) {
while( 2 * parrent <= sizeHeap ) {
int child = 2 * parrent;
if(2 * parrent + 1 <= sizeHeap && Heap[ 2 * parrent + 1 ] < Heap[ 2 * parrent ]) child++;
if(Heap[ parrent ] <= Heap[ child ]) break;
swap(parrent, child);
parrent = child;
}
}
void _HeapSort() {
std::ofstream fout(FOUT);
for(int i = 1; i <= N; ++i) fout<<(removeHeap())<<" ";
fout.close();
}
int removeHeap() {
int min;
min = Heap[ 1 ];
Heap[ 1 ] = Heap[ sizeHeap-- ];
down( 1 );
return min;
}
void swap(int i, int j) {
int x;
x = Heap[ i ] ^ Heap[ j ];
Heap[ i ] = Heap[ i ] ^ x;
Heap[ j ] = Heap[ j ] ^ x;
}
};
int main() {
int elem,
n;
std::ifstream fin(FIN);
fin>>n;
Container obj(n);
for(int i = 1; i <= n; ++i) {
fin>>elem;
obj.add_to_container( elem );
}
obj.HeapSort();
fin.close();
return(0);
};