Um das Haufen zu lernen, müssen Sie zunächst das Konzept des Haufens verstehen. Heap ist ein Array. Es kann als Array -Speichermethode als vollständig binärer Baum ungefähr sein. Aber es gibt andere Eigenschaften mit ihm, die mit binären Sortierbäumen ähnlich sind. Es gibt Unterschiede zwischen dem größten Haufen und dem kleinsten Haufen. seines Kinderknotens. Die Heap -Sortierung verwendet im Allgemeinen den größten Haufen, während der kleinste Haufen eine vorrangige Warteschlange erstellen kann. Es gibt eine Methode im Haufen, mit der die Eigenschaften des Heaps die Maxheap -Methode in unserem Code aufrechterhalten werden. Array, und der zweite Parameter besteht darin, den Haufen anzupassen. Gültige Elemente, die tatsächlich im Haufen gespeichert sind. Vielleicht ist die Länge des Arrays die Anzahl der tatsächlich im Haufen gespeicherten Elemente, aber nicht unbedingt alle Daten, die wir den maximalen Haufen erstellen müssen. Die Einführung in den Algorithmus besagt, dass der linke Unterknoten 2xi beträgt, aber unser Array zählt von 0, so 2 IS, die Kinderknoten dieser Punkte sind alle Blattknoten, sodass wir einen maximalen Haufen bauen, indem wir ihn von unten nach oben sortieren. Stellen Sie sicher, dass alle Knoten in unserem Heap die maximalen Heap -Eigenschaften erfüllen. Schließlich muss die Heapsortierung den ersten Knoten herausnehmen, die verbleibenden Knoten erneut sortieren und dann den Stammknoten herausnehmen. Dies stellt sicher, dass es jedes Mal, wenn wir es herausnehmen, der Höchstwert ist.
Die Codekopie lautet wie folgt:
öffentliche Klasse Heapsort {
private int getleft (int i) {
Rückkehr 2*i+1;
}
private int getright (int i) {
Rückkehr 2*i+2;
}
public void maxheap (int [] heap, int loc, int size) {
int l = getleft (loc);
int r = getright (loc);
int größte = loc;
if (l <size && heap [l]> heap [loc]) {
Größte = l;
}
if (r <size && heap [r]> heap [größter]) {
Größte = r;
}
if (größte! = loc) {
int cache = heap [loc];
heap [loc] = heap [größter];
Haufen [größter] = Cache;
Maxheap (Haufen, groß, Größe);
}
}
public void buildheap (int [] heap) {
für (int i = heap.length/2; i> = 0; i-) {
maxheap (heap, i, heap.length);
}
}
public void sort (int [] heap) {
Buildheap (Haufen);
für (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 = neuer Haufen ();
hs.sort (haufen);
für (int i = 0; i <heap.length; i ++) {
System.out.println (Heap [i]);
}
}
}