Skip to content
Skip to content
Menu
Info Cafe
Info Cafe

GeeksforGeeks (Português)

By admin on Março 4, 2021

HeapSort é uma técnica de classificação baseada numa comparação baseada na estrutura de dados Binary Heap. É semelhante à classificação de selecção onde primeiro encontramos o elemento máximo e colocamos o elemento máximo no final. Repetimos o mesmo processo para os elementos restantes.

O que é o Binary Heap?
Deixe-nos primeiro definir uma Árvore Binária Completa. Uma árvore binária completa é uma árvore binária em que cada nível, excepto possivelmente o último, é completamente preenchido, e todos os nós são o mais à esquerda possível (Fonte Wikipedia)
Uma pilha binária é uma árvore binária completa onde os itens são armazenados numa ordem especial de modo a que o valor num nó pai seja maior (ou menor) do que os valores nos seus dois nós filhos. O primeiro é chamado de pilha máxima e o segundo é chamado de pilha minada. A pilha pode ser representada por uma árvore binária ou array.

Porquê representação baseada em array para o Binary Heap?
Desde que uma pilha binária é uma árvore binária completa, pode ser facilmente representada como um array e a representação baseada em array é eficiente em termos de espaço. Se o nó pai for armazenado no índice I, o filho esquerdo pode ser calculado por 2 * I + 1 e o filho direito por 2 * I + 2 (assumindo que a indexação começa em 0).

Gloritmo de Ordenação do Salto para ordenação em ordem crescente:
1. Construir uma pilha máxima a partir dos dados de entrada.
2. Neste ponto, o maior item é armazenado na raiz da pilha. Substitui-la pelo último item da pilha, seguido da redução do tamanho da pilha por 1. Finalmente, heapificar a raiz da árvore.
3. Repita o passo 2 enquanto o tamanho da pilha é superior a 1.

Como construir a pilha?
O procedimento de heapificação só pode ser aplicado a um nó se os seus nós filhos forem heapificados. Portanto, a heapificação deve ser executada na ordem de baixo para cima.
Vamos compreender com a ajuda de um exemplo:

>br>

Input data: 4, 10, 3, 5, 1 4(0) / \ 10(1) 3(2) / \ 5(3) 1(4)The numbers in bracket represent the indices in the array representation of data.Applying heapify procedure to index 1: 4(0) / \ 10(1) 3(2) / \5(3) 1(4)Applying heapify procedure to index 0: 10(0) / \ 5(1) 3(2) / \ 4(3) 1(4)The heapify procedure calls itself recursively to build heap in top down manner.
C++
div>>div>

>br>

>div>>#include <iostream>
usingnamespacestd;
voidheapify(intarr, intn, inti)
{
intlargest = i;

intl = 2 * i + 1;

intr = 2 * i + 2;
if (l < n && arr > arr)
largest = l;
if (r < n && arr > arr)
largest = r;
if (largest != i) {
swap(arr, arr);
heapify(arr, n, largest);
}
}
voidheapSort(intarr, intn)
{

for(inti = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for(inti = n - 1; i > 0; i--) {
swap(arr, arr);
heapify(arr, i, 0);
}
}
voidprintArray(intarr, int
{
for(inti = 0; i < n; ++i)
cout << arr << " ";
cout << "\n";
}
intmain()
{
intarr = { 12, 11, 13, 5, 6, 7 };
intn = sizeof(arr) / sizeof(arr);
heapSort(arr, n);
cout << "Sorted array is \n";
printArray(arr, n);
}

br>



Java

>/p>

>/p>

publicclassHeapSort {
publicvoidsort(intarr)

{
intn = arr.length;
for(inti = n / 2- 1; i >= 0; i--)
heapify(arr, n, i);
for(inti = n - 1; i > 0; i--) {
inttemp = arr;
arr = arr;
arr = temp;
heapify(arr, i, 0);
}

voidheapify(intarr, intn, inti)

{

intlargest = i;
intl = 2* i + 1;
intr = 2* i + 2;
if(l < n && arr > arr)
largest = l;
if(r < n && arr > arr)
largest = r;
if(largest != i) {

intswap = arr;
arr = arr;
arr = swap;
heapify(arr, n, largest);
}

}
staticvoidprintArray(intarr)
{
intn = arr.length;
for(inti = 0; i < n; ++i)

System.out.print(arr + " ");
System.out.println();
}
publicstaticvoidmain(String args)
{
intarr = { 12, 11, 13, 5, 6, 7};
intn = arr.length;

HeapSort ob = newHeapSort();
ob.sort(arr);
System.out.println("Sorted array is");
printArray(arr);
}
}

>br>>>/div>



Python

>br>

def heapify(arr, n, i):
largest =i
l =2*i +1
r =2*i +2
ifl < n andarr < arr:
largest =l
ifr < n andarr < arr:

largest =r
iflargest !=i:

arr, arr =arr, arr
heapify(arr, n, largest)
defheapSort(arr):
n =len(arr)
fori inrange(n//2-1, -1, -1):
heapify(arr, n, i)
fori inrange(n-1, 0, -1):
arr, arr =arr, arr
heapify(arr, i, 0)
arr =
heapSort(arr)
n =len(arr)
print("Sorted array is")
fori inrange(n):
print("%d"%arr),

>/div>



C#
div>

>br>

br>>

>br>

usingSystem;
publicclassHeapSort {
publicvoidsort(int arr)
{
intn = arr.Length;
for(inti = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for(inti = n - 1; i > 0; i--) {
inttemp = arr;
arr = arr;
arr = temp;
heapify(arr, i, 0);
}
voidheapify(int arr, intn, inti)
{
intlargest = i;
intl = 2 * i + 1;
intr = 2 * i + 2;
if(l < n && arr > arr)
largest = l;
if(r < n && arr > arr)
largest = r;
if(largest != i) {
intswap = arr;
arr = arr;
arr = swap;
heapify(arr, n, largest);
}
}
staticvoidprintArray(int arr)
{
intn = arr.Length;
for(inti = 0; i < n; ++i)
Console.Write(arr + " ");
Console.Read();
}
publicstaticvoidMain()
{
int arr = { 12, 11, 13, 5, 6, 7 };
intn = arr.Length;
HeapSort ob = newHeapSort();
ob.sort(arr);
Console.WriteLine("Sorted array is");
printArray(arr);
}
}



PHP
div>

>br>

>div>><?php
functionheapify(&$arr, $n, $i)
{
$largest= $i

;

$l= 2*$i+ 1;
$r= 2*$i+ 2;
if($l< $n&& $arr > $arr)
$largest= $l;
if($r< $n&& $arr > $arr)
$largest= $r;
if($largest!= $i)
{
$swap= $arr;
$arr = $arr;
$arr = $swap;
heapify($arr, $n, $largest);
}
}
functionheapSort(&$arr, $n)
{

for($i= $n/ 2 - 1; $i>= 0; $i--)

heapify($arr, $n, $i);
for($i= $n-1; $i> 0; $i--)
{
$temp= $arr;
$arr = $arr;
$arr = $temp;
heapify($arr, $i, 0);

}
}
functionprintArray(&$arr, $n)
{
for($i= 0; $i< $n; ++$i)
echo($arr." ") ;
}
$arr= array(12, 11, 13, 5, 6, 7);
$n= sizeof($arr)/sizeof($arr);
heapSort($arr, $n);
echo'Sorted array is '. "\n";

printArray($arr, $n);
?>



Output

Sorted array is 5 6 7 11 12 13 

Aqui está o código C anterior para referência.

Notas:
Amostras é um algoritmo no local.
A implementação típica não é estável, mas pode ser tornada estável (Ver isto)

Complexidade temporal: A complexidade temporal do heapify é O(Logn). A complexidade temporal de createAndBuildHeap() é O(n) e a complexidade temporal global de Heap Sort é O(nLogn).

Aplicações de HeapSort
1. Ordenar um conjunto quase ordenado (ou K ordenado)
2. k maiores (ou menores) elementos de um conjunto
O algoritmo de ordenação Heap tem utilizações limitadas porque o Quicksort e o Mergesort são melhores na prática. No entanto, a própria estrutura de dados Heap é enormemente utilizada. Ver Aplicações da Estrutura de Dados Heap
https://youtu.be/MtQL_ll5KhQbr>Snapshots:

scene00505

scene00793

br>

scene01081

scene01297

scene01513

scene02449

Quiz em Heap Sort

Outros Algoritmos de Triagem em GeeksforGeeks/GeeksQuiz:
QuickSortar, Selecção, Bolha, Inserção, Misturar, Sortido, Sortido, QuickSort, Sortido de Radix, Sortido de Contagem, Sortido de Balde, Sortido de Conchas, Sortido de Pombos, Sortido de Pombos, Sortido de Pombos

P>Prática de codificação para triagem.

Navegação de artigos

Aqui é quando pode visitar The Lodge on the Pioneer Woman’s Ranch de graça
Como Gerir Dentes Britânicos

Deixe uma resposta Cancelar resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

Artigos recentes

  • Firebush (Português)
  • Previsão da taxa de CD para 2021: As taxas manter-se-ão provavelmente baixas, mas poderão aumentar mais tarde no ano
  • Como estruturar a documentação do sistema de gestão da qualidade
  • Dor pélvica crónica e prostatite: sintomas, diagnóstico e tratamento
  • Mixed Berry Crisp (Português)
  • Wheat Ales (Americana)
  • Os benefícios da amamentação após um ano
  • É seguro despejar café moído na pia | Canalização atómica
  • Cool-Down After Your Workout
  • Our Work

Meta

  • Iniciar sessão
  • Feed de entradas
  • Feed de comentários
  • WordPress.org

Arquivo

  • Março 2021
  • Fevereiro 2021
  • Janeiro 2021
  • Dezembro 2020
  • DeutschDeutsch
  • NederlandsNederlands
  • EspañolEspañol
  • FrançaisFrançais
  • PortuguêsPortuguês
  • ItalianoItaliano
  • PolskiPolski
  • 日本語日本語
©2021 Info Cafe | WordPress Theme by SuperbThemes.com