You are on page 1of 4

#include <iostream>

using namespace std;

int n=0;

void makeheap ( int x[ ], int d )


{
int i, val, s, f;
for ( i = 1 ; i < d ; i++ )
{
val = x[i] ; n++;
s = i ; n++;
f = ( s - 1 ) / 2 ; n++;
while ( s > 0 && x[f] < val )
{
x[s] = x[f]; n++;
s = f; n++;
f = ( s - 1 ) / 2; n++;
}
x[s] = val; n++;
}
}

void heapsort ( int x[ ], int d )


{
int i, s, f, ivalue; n++;
for ( i = d - 1 ; i > 0 ; i-- )
{
ivalue = x[i]; n++;
x[i] = x[0]; n++;
f = 0; n++;
if ( i == 1 )
{
s = -1; n++;
}
else
{
s = 1; n++;
}
if ( i > 2 && x[2] > x[1] )
{
s = 2; n++;
}
while ( s >= 0 && ivalue < x[s] )
{
x[f] = x[s]; n++;
f = s; n++;
s = 2 * f + 1; n++;
if ( s + 1 <= i - 1 && x[s] < x[s + 1] )
s++; n++;
if ( s > i - 1 )
s = -1; n++;
}
x[f] = ivalue; n++;
}
}
int main()
{
//initializarea vectorului
int a[100]={169, 639, 570, 737, 415, 820, 515, 384, 232, 451, 892, 229,
273, 255, 737, 599, 54, 308, 584, 498, 498, 159, 704, 996, 692, 561, 177, 283,
305, 316, 620, 53, 802, 834, 700, 409, 610, 1, 481, 413, 55, 581, 437, 207,
321, 992, 720, 493, 198, 696, 493, 488, 157, 886, 663, 772, 589, 488, 377,
278, 499, 112, 401, 354, 804, 131, 73, 630, 102, 131, 471, 429, 993, 324, 434,
213, 735, 832, 506, 898, 51, 467, 117, 863, 625, 558, 200, 760, 86, 992, 986,
470, 883, 382, 175, 709, 164, 950, 896, 126};
int i;
//afisarea vectorului initial
cout << "Vectorul intial este:" <<endl;
for(i=0;i<100;i++)
{
cout << a[i] << "\t";
}
//sortarea
makeheap(a,100);
heapsort(a,100);
//afisarea vectorului sortat
cout << "Vectorul sortat este:" <<endl;
for(i=0;i<100;i++)
{
cout << a[i] << "\t";
}
//afisarea numarului de operatii
cout << "Au fost efectuate " << n << " operatii.";
return 0;
}

include <iostream>
using namespace std;

void MAX_HEAPIFY(int a[], int i, int n)


{
int l,r,largest,loc;
l=2*i;
r=(2*i+1);
if((l<=n)&&a[l]>a[i])
largest=l;
else
largest=i;
if((r<=n)&&(a[r]>a[largest]))
largest=r;
if(largest!=i)
{
loc=a[i];
a[i]=a[largest];
a[largest]=loc;
MAX_HEAPIFY(a, largest,n);
}
}
void BUILD_MAX_HEAP(int a[], int n)
{
for(int k = n/2; k >= 1; k--)
{
MAX_HEAPIFY(a, k, n);
}
}
void HEAPSORT(int a[], int n)
{

BUILD_MAX_HEAP(a,n);
int i, temp;
for (i = n; i >= 2; i--)
{
temp = a[i];
a[i] = a[1];
a[1] = temp;
MAX_HEAPIFY(a, 1, i - 1);
}
}

int main()
{
int n;
cout<<"Enter the size of the array"<<endl;
cin>>n;
int a[n];
cout<<"Enter the elements in the array"<<endl;
for (int i = 1; i <= n; i++)
{
cin>>a[i];
}
HEAPSORT(a, n);
cout<<":::::::SORTED FORM::::::"<<endl;
for (int i = 1; i <= n; i++)
{
cout<<a[i]<<endl;
}
}

You might also like