Pagini recente » Cod sursa (job #1348387) | Cod sursa (job #176470) | Cod sursa (job #1801726) | Cod sursa (job #1430127) | Cod sursa (job #1691228)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
int n,el;
vector <int> nums;
void Read(){
fin >> n;
nums.push_back(0);
for(int i = 1; i <= n; ++ i){
fin >> el;
nums.push_back(el);
}
}
void sift(int i, int n){
int ind;
if(i <= n/2){
ind = 2*i+1 <= n ? (nums[2*i+1] > nums[2*i] ? 2*i : 2*i+1) : 2*i;
if(nums[i] > nums[ind]){
swap(nums[i],nums[ind]);
sift(ind,n);
}
}
}
void makeMinHeap(){
for(int i=n/2 ; i >= 1 ; -- i)
sift(i,n);
}
void heapSort(){
makeMinHeap();
for(int i = n ; i >= 1; -- i ){
swap(nums[i],nums[1]);
sift(1,i-1);
}
}
int main()
{
Read();
heapSort();
reverse(nums.begin()+1,nums.end());
for(unsigned int i=1; i < nums.size() ; ++ i){
fout << nums[i] << " ";
}
return 0;
}