Úvod do řazení haldy v C ++

Heapsort je jednou z třídicích technik založených na porovnání a je součástí třídění výběru. Kde je řazení definováno jako uspořádání datových sad v určitém specifickém pořadí pomocí jedinečné hodnoty známé jako klíčový prvek v daném seznamu. Termín třídění byl zaveden, protože lidé poznali důležitost hledání jakéhokoli prvku v jakékoli dané sadě informací, jinak by bylo velmi obtížné prohledat jakýkoli záznam, pokud by byl neuspořádaný a netříděný.

Při třídění je zapojeno mnoho různých technik, z nichž každá má svou příslušnou účinnost v době potřebné k třídění daných dat a požadavku na prostor v paměti. Jsou to bublinové, vkládací, výběrové, rychlé, sloučené a haldy.

Co je Heap Sort?

Heapsort je přístup k třídění založený na datové struktuře binární haldy podobné výběru, kde nejprve získáme maximální část datové sady a umístíme ji na konec a pokračujeme po zbytek prvků.

Heapsort, jak sám název napovídá. Nejprve vytvoří hromadu datových prvků z daného netříděného pole a poté zkontroluje největší položku a umístí ji na konec částečně tříděného pole. Znovu sestaví hromadu, vyhledá další největší část záznamu a umístí ji do dalšího prázdného slotu od konce poloviny tříděného uspořádání záznamů. Tento proces se opakuje, dokud v haldě nezůstanou žádné položky. Tato technika vyžaduje dvě pole pro uložení haldy a druhou pro tříděné pole.

Algoritmus hromadění haldy v C ++

  • Nejprve vyberte root jako vyvýšený prvek z dané informační sady prvků, abyste vytvořili maximální haldu.
  • Rekonstrukci haldy umístěte nebo zaměňte kořen s posledním prvkem.
  • Velikost haldy se nyní zmenší o 1.
  • Potom znovu vytvoříme haldu se zbývajícími prvky a pokračujeme, dokud se velikost haldy nezmění na 1.

Příklad řazení haldy v C ++

Tato technika používá binární haldu, která je vytvořena pomocí úplného binárního stromu, kde kořenový uzel je větší než jeho dva podřízené uzly.

Zvažte dané pole datových sad.

Pojďme podle algoritmu. Říká, že jako kořen vybere nejvyšší prvek a vytvoří maximální haldu.

1. První iterace

Nyní bude pole mít podobu:

Nyní bude mít seřazené pole podobu:

Velikost haldy bude snížena o 1, nyní 6-1 = 5.

2. Druhá iterace

Takže teď halda vypadá takto:

Pole má podobu:

Seřazené pole bude:

Velikost haldy bude snížena o 1, nyní 5-1 = 4.

3. Třetí iterace

Nová hromada vypadá takto:

Pole má podobu:

Seřazené pole bude:

Velikost haldy bude snížena o 1, nyní 4-1 = 3.

4. Čtvrtá iterace

Nová hromada vypadá takto:

Pole má podobu:

Seřazené pole bude:


Velikost haldy bude snížena o 1, nyní 3-1 = 2.

5. Pátá iterace

Nová hromada vypadá takto:

Pole má podobu:

Seřazené pole bude:

Velikost haldy bude snížena o 1, nyní 2-1 = 1.

6. Poslední iterace

Nová hromada vypadá takto:

Pole má:

4

Z algoritmu jsme provedli všechny kroky, dokud velikost haldy není 1. Takže nyní máme seřazené pole:


Proto je seřazené pole maximální haldy vzestupně. Pokud potřebujeme pole seřazené sestupně, postupujte podle výše uvedených kroků s minimální haldy.

Program C ++ pro třídění haldy je uveden níže:

#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);
)

Výstup:

Závěr

Heapsort je technika založená na porovnání, což je vylepšení třídění výběru. Hromadné řazení používá výběr nejvyššího nebo nejnižšího prvku v daném poli pro třídění ve vzestupném nebo sestupném pořadí s maximální nebo minimální haldou. Proveďte tento proces, dokud nedostaneme jeden jako velikost haldy. Tato technika třídění se také používá k nalezení největšího a nejnižšího prvku v poli. Technika třídění haldy je efektivnější a rychlejší než technika třídění výběru.

Doporučené články

Toto je průvodce Heap Sort in C ++. Zde diskutujeme o tom, co je halda v c ++, pracujeme s jeho algoritmem a Příkladem. Další informace naleznete také v následujících článcích

  1. Haldy Seřadit v C.
  2. Hromadné řazení v Javě
  3. Přetížení v C ++
  4. Ukazatele v C ++
  5. Přetížení v Javě

Kategorie: