Pagini recente » Cod sursa (job #2180649) | Cod sursa (job #3130008) | Cod sursa (job #3128720) | Cod sursa (job #1255154) | Cod sursa (job #525817)
Cod sursa(job #525817)
#include <fstream>
using namespace std;
void heapSort(int* vect, int n);
void buildMaxHeap(int* vect, int n);
void maxHeapify(int* vect, int n, int i);
void interschimbare(int* x, int* y);
int main(void)
{
int n, *vect;
ifstream f("algsort.in");
f>>n;
vect = new int[n+1];
for (int i=1;i<=n;i++)
{
f>>vect[i];
}
f.close();
heapSort(vect,n);
ofstream g("algsort.out");
for (int i=1;i<=n;i++)
{
g<<vect[i]<<" ";
}
g<<endl;
delete[] vect;
}
void heapSort(int* vect, int n)
{
buildMaxHeap(vect,n);
while (n>1)
{
interschimbare(&vect[1],&vect[n]);
n--;
maxHeapify(vect,n,1);
}
}
void buildMaxHeap(int* vect, int n)
{
for (int i=n/2;i>=1;i--)
{
maxHeapify(vect,n,i);
}
}
void maxHeapify(int* vect, int n, int i)
{
int largest = i;
int left = i<<1;
int right = left|1;
if (left <=n && vect[left] > vect[largest])
{
largest = left;
}
if (right <=n && vect[right] > vect[largest])
{
largest = right;
}
if (largest != i)
{
interschimbare(&vect[i],&vect[largest]);
maxHeapify(vect,n,largest);
}
}
void interschimbare(int* x, int* y)
{
int tmp = *x;
*x = *y;
*y = tmp;
}