Pagini recente » Cod sursa (job #2555964) | Profil polica | Cod sursa (job #498569) | Cod sursa (job #1288558) | Cod sursa (job #751918)
Cod sursa(job #751918)
#include <fstream>
void heapify (signed int array [ ], unsigned int index, unsigned int max)
{
unsigned int left(index << 1), right(left);
++left;
right += 2;
unsigned int largest(index);
if (left < max && array[left] > array[largest])
largest = left;
if (right < max && array[right] > array[largest])
largest = right;
if (index != largest)
{
array[index] ^= array[largest];
array[largest] ^= array[index];
array[index] ^= array[largest];
heapify(array,largest,max);
}
}
void build_heap (signed int array [ ], unsigned int n)
{
unsigned int i((n >> 1) - 1);
while (true)
{
heapify(array,i,n);
if (i == 0)
break;
--i;
}
}
void heapsort (signed int array [ ], unsigned int n)
{
build_heap(array,n);
--n;
while (true)
{
if (*array != array[n])
{
*array ^= array[n];
array[n] ^= *array;
*array ^= array[n];
}
if (n)
{
heapify(array,0,n);
--n;
}
else
break;
}
}
int main (void)
{
unsigned int n;
std::ifstream input("algsort.in");
input >> n;
signed int *v(new signed int [n]), *it(v), *limit(v + n);
do
{
input >> *it;
++it;
}
while (it < limit);
input.close();
heapsort(v,n);
it = v;
--limit;
std::ofstream output("algsort.out");
while (true)
{
output << *it;
if (it == limit)
break;
output.put(' ');
++it;
}
output.put('\n');
output.close();
return 0;
}