Pagini recente » Cod sursa (job #2268072) | Cod sursa (job #1630583) | Cod sursa (job #1887560) | Cod sursa (job #3217757) | Cod sursa (job #1517020)
#include <iostream>
#include<fstream>
using namespace std;
void swap (int *a , int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
void shiftdown (int v[500002], int k , int n)// aici iau maximu dintre tata si copii ca pana la urma sa "scot" maximul
{
while (2*k+1<n)
{//cat nu am iest din vector
int child = 2*k+1;
if ( child+1 < n && (v[child] < v[child+1])) child++;
if ( v[k] < v[child]) {
swap (v[child], v[k]);
k=child;
}
else return;
}
}
void heapsort (int v[500002] , int n )
{//aici "elimin" cel mai mare termen
int k;
for (k=n/2;k>=0;k--)
{
shiftdown(v , k , n);
}
cout<<v[n-1];
while (n-1>0)
{
swap (v[n-1],v[0]);// "omor" maximul pt a sorta
shiftdown(v , 0 , n-1);//vad daca radacina e mai mica ca fii
n--; // scad n ca sa nu scriu peste alte valori
}
}
int main()
{
ifstream fin("algsort.in");
ofstream fout ("algsort.out");
int n;
fin>>n;
int v[n];
for (int i=0;i<n;++i)
{
fin>>v[i];
}
heapsort(v , n);
for (int i=0;i<n;++i)
{
fout<<v[i]<<" ";
}
}