Cod sursa(job #1691228)

Utilizator petru.cehanCehan Petru petru.cehan Data 17 aprilie 2016 15:11:39
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#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;
}