Въведение в сортирането на Heap в C ++
Heapsort е една от методите за сортиране на базата на сравнение и е част от сортирането за подбор. Когато сортирането се дефинира като подреждане на масиви от данни в някакъв конкретен ред, като се използва уникална стойност, известна като ключов елемент в дадения списък. Терминът сортиране беше въведен, тъй като хората опознаха важността на търсенето на който и да е елемент от даден набор от информация в противен случай, би било много трудно да търсят всеки запис, ако той е нередовен и несортиран.
Има много различни техники, участващи в сортирането, като всяка от тях има своята ефективност във времето, необходимо за сортиране на дадените данни и изискване за място в паметта. Те са сортиране на балончета, сортиране на вмъкване, сортиране на селекцията, бързо сортиране, сортиране на сливане и сортиране на купчина.
Какво е сортиране на купчина?
Heapsort е метод за сортиране, базиран на структурата на данни от двоични купища, подобен на сортирането на селекция, където първо получаваме максималния набор от данни и го поставяме в края и продължаваме към останалите елементи.
Heapsort, както подсказва самото име. Първо изгражда купчината от елементи от дадения несортиран масив и след това проверява за най-големия елемент и го поставя в края на частично сортирания масив. Той отново възстановява купчината, търси следващото най-голямо парче запис и го поставя в следващия празен слот от края на половината подредено подреждане на записи. Този процес се повтаря, докато в грамадата не останат никакви елементи. Тази техника изисква два масива, единият за съхраняване на купчината, а другият за сортиран масив.
Алгоритъм на купчината Сортирайте в C ++
- Първо изберете корен като повдигнат елемент от дадения информационен набор от елементи, за да създадете максимална грамада.
- Реконструирайте купчината, като поставите или замените корена с последния елемент.
- Размерът на купчината сега ще се свие с 1.
- След това отново правим купчината с останалите елементи и продължаваме, докато размерът на купчината се намали до 1.
Пример за сортиране на купчина в C ++
Тази техника използва двоична купчина, която е конструирана с помощта на цялостно бинарно дърво, където коренният възел е по-голям от двата му детски възла.
Помислете за дадения масив от набори от данни.
Нека вървим според алгоритъма. Тя казва да изберете най-високия елемент като корен и да конструирате максималната грамада.
1. Първа итерация
Сега масивът ще бъде във формата:
Сега сортираният масив ще бъде във формата:
Размерът на купчината ще бъде намален с 1, сега 6-1 = 5.
2. Втора итерация
Така че сега грамадата изглежда така:
Масивът е във формата:
Сортираният масив ще бъде:
Размерът на купчината ще бъде намален с 1, сега 5-1 = 4.
3. Трета итерация
Новата грамада изглежда така:
Масивът е във формата:
Сортираният масив ще бъде:
Размерът на купчината ще бъде намален с 1, сега 4-1 = 3.
4. Четвърта итерация
Новата грамада изглежда така:
Масивът е във формата:
Сортираният масив ще бъде:
Размерът на купчината ще бъде намален с 1, сега 3-1 = 2.
5. Пета итерация
Новата грамада изглежда така:
Масивът е във формата:
Сортираният масив ще бъде:
Размерът на купчината ще бъде намален с 1, сега 2-1 = 1.
6. Последна итерация
Новата грамада изглежда така:
Масивът има:
4
От алгоритъма сме извършили всички стъпки, докато размерът на хепата е 1. Така че сега имаме сортиран масив:
Следователно сортираният масив от максималната грамада е във възходящ ред. Ако се нуждаем от масива, сортиран в низходящ ред, след това следвайте горните стъпки с минимална купчина.
Програмата C ++ за сортиране на купчината е както е дадено по-долу:
#include
using namespace std;
void heapify(int arr(), int n, int i)
(
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l arr(largest))
largest = l;
if (r arr(largest))
largest = r;
if (largest != i) (
swap(arr(i), arr(largest));
heapify(arr, n, largest);
)
)
void heapSort(int arr(), int n)
(
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for (int i = n - 1; i >= 0; i--)
(
swap(arr(0), arr(i));
heapify(arr, i, 0);
)
)
void printArray(int arr(), int n)
(
for (int i = 0; i < n; ++i)
cout << arr(i) << " ";
cout << "\n";
)
int main()
(
int arr() = ( 5, 18, 4, 13, 10, 7);
int n = sizeof(arr) / sizeof(arr(0));
heapSort(arr, n);
cout << "Sorted array is \n";
printArray(arr, n);
)
изход:
заключение
Heapsort е техниката, базирана на сравнението, която е подобряването на подборното сортиране. Сортирането на Heap използва избора на най-високия или най-ниския елемент в дадения масив, за да се сортира във възходящ или низходящ ред, съответно с максимална или минимална купчина. Провеждайте този процес, докато не получим такъв като размер на купчината. Тази техника за сортиране се използва и за намиране на най-големия и най-ниския елемент в масива. Техниката за сортиране на купчина е по-ефективна и по-бърза от техниката за сортиране на селекция.
Препоръчителни статии
Това е наръчник за сортиране на Heap в C ++. Тук обсъждаме какво е сортирането на куп в c ++, като работим с неговия алгоритъм и пример. Можете също да разгледате следните статии, за да научите повече-
- Сортиране на купчина в С
- Сортиране в купа с Java
- Претоварване в C ++
- Показалци в C ++
- Претоварване в Java