#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iostream>
/*Heap Sort с применением стандартных средств языка*/
void heapsort_std(int a[], int size){
std::vector<int> v;
v.assign(a, a + sizeof(a)/sizeof(int)); //Добавили все элементы массива в вектор
std::make_heap(v.begin(), v.end()); //Преобразовали вектор в кучу
//Цикл сортировки
for(int i = size - 1; i >= 0; i--){
std::pop_heap(v.begin(), v.end()); //Переместили наибольший элемент в конец
a[i] = v.back();
v.pop_back(); //Удаляем наибольший элемент кучи из конца вектора
}
}
int main(void) {
int v[10] = {7, 1, 3, 6, 5, 8, 9, 4, 0, 2};
heapsort_std(v, 10);
for(int i = 0; i < 10; i++)
std::cout << v[i] << ' ';
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDxpb3N0cmVhbT4KIAovKkhlYXAgU29ydCDRgSDQv9GA0LjQvNC10L3QtdC90LjQtdC8INGB0YLQsNC90LTQsNGA0YLQvdGL0YUg0YHRgNC10LTRgdGC0LIg0Y/Qt9GL0LrQsCovCnZvaWQgaGVhcHNvcnRfc3RkKGludCBhW10sIGludCBzaXplKXsKCXN0ZDo6dmVjdG9yPGludD4gdjsKIAoJdi5hc3NpZ24oYSwgYSArIHNpemVvZihhKS9zaXplb2YoaW50KSk7CS8v0JTQvtCx0LDQstC40LvQuCDQstGB0LUg0Y3Qu9C10LzQtdC90YLRiyDQvNCw0YHRgdC40LLQsCDQsiDQstC10LrRgtC+0YAKCXN0ZDo6bWFrZV9oZWFwKHYuYmVnaW4oKSwgdi5lbmQoKSk7CQkvL9Cf0YDQtdC+0LHRgNCw0LfQvtCy0LDQu9C4INCy0LXQutGC0L7RgCDQsiDQutGD0YfRgwoJLy/QptC40LrQuyDRgdC+0YDRgtC40YDQvtCy0LrQuAoJZm9yKGludCBpID0gc2l6ZSAtIDE7IGkgPj0gMDsgaS0tKXsKCQlzdGQ6OnBvcF9oZWFwKHYuYmVnaW4oKSwgdi5lbmQoKSk7CS8v0J/QtdGA0LXQvNC10YHRgtC40LvQuCDQvdCw0LjQsdC+0LvRjNGI0LjQuSDRjdC70LXQvNC10L3RgiDQsiDQutC+0L3QtdGGCgkJYVtpXSA9IHYuYmFjaygpOwoJCXYucG9wX2JhY2soKTsJLy/Qo9C00LDQu9GP0LXQvCDQvdCw0LjQsdC+0LvRjNGI0LjQuSDRjdC70LXQvNC10L3RgiDQutGD0YfQuCDQuNC3INC60L7QvdGG0LAg0LLQtdC60YLQvtGA0LAKCX0KfQogCmludCBtYWluKHZvaWQpIHsKCWludCB2WzEwXSA9IHs3LCAxLCAzLCA2LCA1LCA4LCA5LCA0LCAwLCAyfTsKCWhlYXBzb3J0X3N0ZCh2LCAxMCk7Cglmb3IoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKCQlzdGQ6OmNvdXQgPDwgdltpXSA8PCAnICc7CglyZXR1cm4gMDsKfQ==