Para aprender a classificação de heap, você deve primeiro entender o conceito de heap. Pode ser aproximado como um método de armazenamento de matriz como uma árvore completamente binária. Mas existem outras propriedades com ele, que são semelhantes às árvores de classificação binárias. Existem diferenças entre o maior heap e o menor heap. de seu nó filho. A classificação de heap geralmente usa o maior heap, enquanto o menor heap pode construir uma fila de prioridade. Existe um método no heap que é usado para manter as propriedades do heap, que é o método MaxHeap em nosso código abaixo. Array e o segundo parâmetro é ajustar o heap. elementos válidos realmente armazenados na pilha. Talvez o comprimento da matriz seja o número de elementos realmente armazenados na pilha, mas não necessariamente todos os dados necessários para criar a pilha máxima. A introdução ao algoritmo diz que o sub-nó esquerdo é 2xi, mas nossa matriz conta de 0, para que o sub-nó esquerdo se torne 2xi+1. 2 é que os nós filhos desses pontos são todos nós de folhas, por isso construímos uma pilha máxima, classificando -o de baixo para cima. Certifique -se de que todos os nós em nossa pilha atendam às propriedades máximas da pilha. Finalmente, a classificação de heap é retirar o primeiro nó, classificar os nós restantes novamente e retirar o nó raiz. Isso garante que toda vez que o retiramos, é o valor máximo.
A cópia do código é a seguinte:
classe pública heapsort {
private int getleft (int i) {
retornar 2*i+1;
}
privado int getright (int i) {
retornar 2*i+2;
}
public void maxheap (int [] heap, int loc, int size) {
int l = getLeft (loc);
int r = getright (loc);
int maior = loc;
if (l <size && heap [l]> heap [loc]) {
Maior = L;
}
if (r <size && heap [r]> heap [maior]) {
Maior = r;
}
if (maior! = loc) {
int cache = heap [loc];
heap [loc] = heap [maior];
heap [maior] = cache;
maxheap (heap, grande, tamanho);
}
}
public void BuildHeap (int [] heap) {
for (int i = heap.length/2; i> = 0; i-) {
maxheap (heap, i, heap.length);
}
}
public void Sort (int [] heap) {
BuildHeap (heap);
for (int i = heap.length-1; i> 1; i-) {
int cache = heap [0];
heap [0] = heap [i];
heap [i] = cache;
maxheap (heap, 0, i);
}
int cache = heap [0];
heap [0] = heap [1];
heap [1] = cache;
}
public static void main (string [] args) {
int [] heap = new int [] {4,1,5,3,7,12,65,7};
Heapsort hs = new heapsort ();
hs.sort (heap);
for (int i = 0; i <heap.length; i ++) {
System.out.println (heap [i]);
}
}
}