Функция sort_heap в C ++

Опубликовано: 31 Декабря, 2021

Sort_heap () - это алгоритм STL, который сортирует кучу в диапазоне, указанном по началу и концу. Сортирует элементы в диапазоне кучи [начало, конец) в порядке возрастания.

Вторая форма позволяет вам указать функцию сравнения, которая определяет, когда один элемент меньше другого.
Определено в заголовке

Он имеет две версии, которые определены ниже:.
1. Сравнение элементов с помощью «<»:
Синтаксис:

 шаблон 
void sort_heap (начало RandIter, конец RandIter);
начало, конец: диапазон элементов для сортировки
Возвращаемое значение: поскольку тип возвращаемого значения недействителен, поэтому он не возвращает никакого значения.

Реализация

шаблон
void sort_heap (начало RandIter, конец RandIter);
{
    пока (начало! = конец)
        std :: pop_heap (начало, конец--);
}

2. Путем сравнения с использованием предопределенной функции:
Синтаксис:

template 
void sort_heap(RandIter start, RandIter end, Comp cmpfn);
start, end :    the range of elements to sort
comp:   comparison function object (i.e. an object that satisfies the requirements of Compare) 
which returns ?true if the first argument is less than the second.
Return Value : Since, its return type is void, so it doesnot return any value. 

Реализация

шаблон
void sort_heap (начало RandIter, конец RandIter, Comp cmpfn);
{
    пока (начало! = конец)
        std :: pop_heap (начало, конец--, cmpfn);
}
// CPP program to illustrate
// std::sort_heap
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector< int > v = {8, 6, 2, 1, 5, 10};
make_heap(v.begin(), v.end());
cout << "heap: " ;
for ( const auto &i : v) {
cout << i << ' ' ;
}
sort_heap(v.begin(), v.end());
std::cout <<endl<< "now sorted: " ;
for ( const auto &i : v) {
cout << i << ' ' ;
}
std::cout <<endl;
}

Выход:

куча: 10 6 8 1 5 2 
сейчас отсортировано: 1 2 5 6 8 10 

Другой пример :

// CPP program to illustrate
// std::sort_heap
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
int main( ) {
using namespace std;
vector < int > vt1, vt2;
vector < int >::iterator Itera1, Itera2;
int i;
for ( i = 1 ; i <=5 ; i++ )
vt1.push_back( i );
random_shuffle( vt1.begin( ), vt1.end( ) );
cout << "vector vt1 is ( " ;
for ( Itera1 = vt1.begin( ) ; Itera1 != vt1.end( ) ; Itera1++ )
cout << *Itera1 << " " ;
cout << ")" << endl;
sort_heap (vt1.begin( ), vt1.end( ) );
cout << "heap vt1 sorted range: ( " ;
for ( Itera1 = vt1.begin( ) ; Itera1 != vt1.end( ) ; Itera1++ )
cout << *Itera1 << " " ;
cout << ")" << endl;
}

Выход:

вектор vt1 равен (5 4 2 3 1)
heap vt1 отсортированный диапазон: (1 2 3 4 5)

Эта статья предоставлена Шивани Гугтиалом . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++