Maximaler Stapel
Der größte Haufen ist, dass das übergeordnete Element größer ist als das untergeordnete Element und ein vollständig binärer Baum.
Daten [1] beginnt zu speichern, Daten [0] sind leer und nicht verwendet. Sie können auch Daten [0] als Größe verwenden.
öffentliche Klasse Maxheap <T erweitert vergleichbar <? super t >> {private t [] data; private int size; private int capacity; public maxheap (int capacity) {thata.data = (t []) Neu vergleichbar [Kapazität + 1]; size = 0; Diese. oder * / public void ShiftUp (int child) {while (child> 1 && data [child] .compareto (data [child / 2])> 0) {swap (child, child / 2); child = child / 2;}} / *** @param eine untere Ecke Marke eines Elements in der Datenanordnung. max (int a, int b) {if (data [a] .Compareto (Daten [b]) <0) {// if data [b] Big Return b; // return b} else {// Wenn Daten [a] Big Return a; // return a}}/*** @Param A -Ecke ein Element eines Elements in einem Element in der Datenarray @Param @Param Bigere Bessere. Im Datenarray*@return return die untere Eckmarke, deren Element groß ist Vater) {while (true) {int lchild = Vater * 2; // Linkskind int rchild = Vater * 2 + 1; // Right Child int newfather = Vater; // Neuendlichkeit steht kurz vor dem Aktualisierung. Wer ist die untere Ecke des übergeordneten, linken und rechten Knotens? If (lchild> Größe) {// Wenn der Vaterknoten weder das linke Kind noch das rechte Kind zurückkehrt;} else wenn (rchild> Größe) {// Wenn der Vaterknoten nur das linke Kind hat, kein rechter Kinder -Neuheit = Max (Vater, lchild);} sonst == Vater) {// Es bedeutet, dass der Vater größer ist als beide Kinderknoten, und der Tabellenname ist bereits ein großer Wurzelhaufen. Daher muss die Rückgabe nicht weiter angepasst werden;} else {// ansonsten müssen Sie den Heap weiter anpassen, bis der große Wurzelhaufen -Zustand erfüllt ist. shiftDown(newFather)}}} public static void main(String[] args) {//Create a large root heap MaxHeap<Integer> maxHeap = new MaxHeap<Integer>(100);//Save for (int i = 0; i < 100; i++) {maxHeap.insert((int) (Math.random() * 100));}//Create an array Integer[] arr = new Integer[100];//Pick from the heap and put it into the array for (int i = 0; i < 100; i++) {arr[i] = maxHeap.popMax();System.out.print(arr[i] + " ");}System.out.println();}}Maximal Heap: Shiftdown () -Funktion unterscheidet sich von den oben genannten
öffentliche Klasse Maxheap <T erweitert vergleichbar <? super t >> {private t [] data; private int size; private int capacity; public maxheap (int capacity) {data = (t []) Neu vergleichbar [Kapazität + 1]; Item; Größe ++; ShiftUp (Größe);}/** * @return pop max root (Popup-bedeutet Deletion im Vergleich zu seeexmax) */public t popmax () {t ret = data [1]; Swap (1, Größe); Größe-; Daten [1];} public void Swap (int i, int j) {if (i! = j) {t temp = data [i]; Daten [i] = Daten [j]; Daten [j] = temp;}} public void Shiftup (int k) {while (k> 1 && data [k / 2] .Competo (k / k / k / k / k / k / k / k / k / k) (k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k / k /). 2;}} public void Shiftdown (int Vater) {while (2 * Vater <= Größe) {int newfather = 2 * father; if (newfather + 1 <= size && data [newfather + 1] .compareto (data [newfather])> 0) {// data [j] data [j + 1] derjenige, der den großen Neuen Newfather {} wenn nimmt. (Daten [Vater] .Compareto (Daten [Neuendlichkeit])> = 0) {break;} else {Swap (Vater, Neuendlichkeit); // Der Wert wird ausgetauscht Vater = Neuheit; // Neuendlichkeit ist (2*Vater) oder (2*Vater+1), dh Shiftdown (Newfather); Maxheap <Integer> maxheap = neuer Maxheap <Integer> (100); // Save for (int i = 0; i <100; i ++) {maxheap.insert ((int) (math.random () * 100); 100;Zusammenfassen
Das obige dreht sich alles um das Beispiel des maximalen Heap -Code des Java -Sprache implementieren, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!