Pagini recente » Cod sursa (job #2757846) | Cod sursa (job #1142679) | Cod sursa (job #295070) | Cod sursa (job #1359817) | Cod sursa (job #1516239)
#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 dinte tata si copii ca pana la urma sa "scot" maximul
{
while (2*k+1<n)
{//cat nu am iest din vector
int child = max(v[2*k+1],v[2*k+2]);
if (child > v[k])
{
swap(child,v[k]);
}
k=child;
}
}
void heapsort (int v[500002] , int n )
{//aici "elimin" cel mai mare termen
for (int k=n/2;k<n;--k)
{
shiftdown(v , k , n);
}
while (n-1)
{
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);
}