Cod sursa(job #2079696)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 1 decembrie 2017 18:40:44
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 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 cel_mai_mare=x;
int st=left(x);
int dr=right(x);
if(st<=n&&v[st]>v[cel_mai_mare])cel_mai_mare=st;
if(dr<=n&&v[dr]>v[cel_mai_mare])cel_mai_mare=dr;
if(x!=cel_mai_mare){
v[x]^=v[cel_mai_mare];
v[cel_mai_mare]^=v[x];
v[x]^=v[cel_mai_mare];

coborare(cel_mai_mare);
}

}

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(){
    in>>v[1];
for(int i=2;i<=n;i++){
in>>v[i];
ridicare(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]<<' ';
free(v);
    return 0;
}