Cod sursa(job #2079685)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 1 decembrie 2017 18:27:52
Problema Sortare prin comparare Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");

int *v,n;


int father(int x){
return x/2;
}
int left(int x){
return x*2;
}
int right(int x){
return (x*2+1);
}
int max_heap(){
return v[1];
}
void coborare(int x){
int fiu;
do{
    fiu=0;
if(left(x)<=n){
fiu=left(x);
if(right(x)<=n&&v[right(x)]>v[left(x)])fiu=right(x);
if(v[fiu]<=v[x])fiu=0;


}
if(fiu){
v[fiu]^=v[x];
v[x]^=v[fiu];
v[fiu]^=v[x];
}

}while(fiu);


}

void ridicare(int x){
while(x>1&&v[father(x)]<v[x]){
v[father(x)]^=v[x];
v[x]^=v[father(x)];
v[father(x)]^=v[x];
x=father(x);
}


}

void creare_heap(){
for(int i=n/2;i>0;--i)coborare(i);
}

void heapsort(){
creare_heap();
for(int i=n;i>=2;--i){
v[1]^=v[i];
v[i]^=v[1];
v[1]^=v[i];
n--;
coborare(1);
}

}


int main()
{in>>n;
int aux=n;
v=(int*)malloc(n*4+20);
for (int i=1;i<=n;i++)in>>v[i];
heapsort();
for(int i=1;i<=aux;i++)out<<v[i]<<' ';
    return 0;
}