Данный вид сортировки весьма эффективен и свой реализацией похож на сортировку “Вставками”. Только её отличие в том, что она сортирует со скоростью O(n*log n), что ощутимей быстрее, чем (O(n2)), которая выдаёт сортировка вставками. Вот ресурс, на котором очень хорошо и подробно рассмотрена реализация “Пирамидальной” сортировки - здесь . Код реализации данного вида сортировки:
#include "stdafx.h"#include "iostream"#include "time.h"#include "iomanip"#include "iterator"
template void DownHeap(T m[], int k, int n)
{
T new_el;
int child;
new_el = m[k];
while(k <= n/2)
    {
child = 2*k;
if( child < n && m[child] < m[child+1] )
child++;
if( new_el >= m[child] )
break;
m[k] = m[child];
k = child;
    }
m[k] = new_el;
}
template void HeapSort(T m[], int n)
{
int i;
T temp;
for(i = n / 2 - 1; i >= 0; --i)
DownHeap(m, i, n-1);
for(i=n-1; i > 0; --i)
    {
temp = m[i];
m[i] = m[0];
m[0] = temp;
DownHeap(m, 0, i-1);
    }
}
int main()
{
setlocale(LC_ALL, "Russian");
int n;     // Количество элементов массива
cout << "Введите размер массива: ";
cin >> n;
cout << endl;
cout << "Массив: " << endl;
int *mas = new int [n];
srand(time(NULL));
for (int i = 0; i < n; i++)
    {
mas[i] = rand() % 200 - 100;   // заполняем массив случайными числами
cout << mas[i] << " ";   // выводим массив на экран
    }
cout << "\n\n";
HeapSort(mas, n);   // вызываем функцию Быстрой сортировки
cout << "Отсортированный массив: " << endl;
for (int i = 0; i < n; i++)
    {
cout << mas[i] << " ";   // Вывод на экран отсортированного массива
    }
cout << "\n\n";
system("PAUSE");
return 0;
}
Результат:<< К списку сортировок