Pagini recente » Cod sursa (job #1809713) | Cod sursa (job #2422610) | Cod sursa (job #721783) | Cod sursa (job #423164) | Cod sursa (job #2739475)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
vector<int> v, sorted;
int n;
void Sift(vector<int> &v, int N, int i){
int son = 2*i + 1;
while(son < N){
if(2*i+2 < N && v[2*i+2] < v[2*i+1] )
son = 2*i+2;
if(v[son] >= v[i])
break;
swap(v[i], v[son]);
i = son;
son = 2* i +1;
}
}
void Read(){
int x;
fin >> n;
for(int i = 0; i<n; ++i)
{
fin >> x;
v.push_back(x);
swap(v[0], v[i]);
Sift(v, i + 1, 0);
}
for(int i = 0; i<n; ++i)
cout << v[i] << " ";
}
void HeapSort(){
int i,j;
while(n > 0){
sorted.push_back(v[0]);
swap(v[0], v[n-1]);
n--;
Sift(v,n, 0);
}
for(int i = 0; i<sorted.size(); ++i){
fout<<sorted[i]<<" ";
}
}
int main()
{
Read();
HeapSort();
return 0;
}