Pile maximale
Le plus gros tas est que l'élément parent est plus grand que l'élément enfant et est un arbre complètement binaire.
Les données [1] commencent à enregistrer, les données [0] sont vides et non utilisées. Vous pouvez également utiliser les données [0] comme taille.
La classe publique Maxheap <t s'étend comparable <? super t >> {private t [] data; private int size; private int Capacity; public maxheap (int capacity) {this.data = (t []) new comparable [capacité + 1]; size = 0; this.capacity = capacity;} public int size () {return this.size;} public boolean isEmpty () {return size == 0;} public int GetCapacity () {return 0; This.capacity;} / ** * @return Voir la racine maximale (ne les voir que sans suppression, par rapport à popmax) * / public t SeekMax () {return data [1];} public void swap (int i, int j) {if (i! = j) {T temp = data [i]; data [i] = data [j]; data [j] = temp;}} {Size ++; data [size] = item; shipUp (taille);} / ** * @return pop la racine maximale (popup signifie délétion, par rapport à SeekMax) * / public t popmax () {swap (1, taille -); shiftdown (1); return data [size + 1];} / ** * @Param Enfant est la marque d'angle inférieure de l'enfant Node est enfant, et la table des parents est l'enfant pour l'enfant Node est enfant, et la table des parents est un enfant NODE ENFOR * / public void shipUp (int child) {while (enfant> 1 && data [enfant] .compareto (data [enfant / 2])> 0) {swap (enfant, enfant inférieur / 2); enfant = enfant / 2;}} / ** * @param une marque d'angle inférieure d'un élément dans l'array max (int a, int b) {if (data [a] .compareto (data [b]) <0) {// if data [b] big return b; // return b} else {// if data [a] big return a; // renvoie a}} / ** * @param un point de coin inférieur d'un élément dans le record de données * @param b baisser la marque de coin d'un élément dans le tableau de données * @Param Corning Belk de la marque BOAM BOLE Corner d'un élément dans le tableau de données * Dans le tableau de données * @return Renvoie la marque de coin inférieure dont l'élément est grand * / privé int max (int a, int b, int c) {int grossest = max (a, b); le plus gros = max (plus grand, c); retour plus grand;} / ** * @param père de la marque d'angle inférieure du nœud parent est père, et les tables d'angle inférieures des nœuds de gauche et des nœuds droits sont: père * 2 et père * 2 + 1 * père) {while (true) {int lChild = père * 2; // gauche enfant int rchild = père * 2 + 1; // rectère enfant intwfather = père; // newfather est sur le point d'être mis à jour. Qui est la marque d'angle inférieure du parent, les nœuds gauche et droit? If (lChild> taille) {// Si le nœud père n'a ni l'enfant gauche ni l'enfant droit ne revient;} else if (rchild> taille) {// si le nœud père n'a que l'enfant gauche, aucun enfant droit newfather = max (père, lchild);} else {// si le nœud père a à la fois l'enfant gauche et le nouveau nouveaufather = max (père, lchild, rchild); == father) {//It means that father is larger than both child nodes, and the table name is already a big root heap, so there is no need to continue to adjust the return;} else {// Otherwise, you need to continue to adjust the heap until the big root heap condition is met swap(father, newFather);//Values are swap = newFather;//Update the value of father, which is equivalent to continuing to adjust ShiftDown (newfather)}}} public static void main (String [] args) {// créer un grand tas de racine maxheap <inger> maxheap = new maxheap <nteger> (100); // Enregistrer (int i = 0; i <100; i ++) {maxheap.insert ((int) (math.random () * 100));} Entier [] arr = nouvel entier [100]; // choisissez dans le tas et mettez-le dans le tableau pour (int i = 0; i <100; i ++) {arr [i] = maxheap.popmax (); system.out.print (arr [i] + "");} system.out.println ();}}Tas maximum: la fonction SwitchDown () est différente de ce qui précède
La classe publique Maxheap <t s'étend comparable <? super t >> {private t [] data; private int size; private int capacity; public maxheap (int capacity) {data = (t []) new comparable [capacité + 1]; this.capacity = capacity; size = 0;} public int size () {return size;} public boolean isEempty () {return size == 0;} public insert (Tize) {data [taille + 1] = 1] élément; taille ++; shipup (taille);} / ** * @return pop max root (contextuel signifie délétion, par rapport à SeekMax) * / public t popmax () {t ret = data [1]; swap (1, taille); taille -; shiftdown (1); return ret;} / ** * @return View the maximum root (seulement sans délétion, comparé avec Popmax) * data [1];} public void swap (int i, int j) {if (i! = j) {t temp = data [i]; data [i] = data [j]; data [j] = temp;}} public void shipUp (int k) {while (k> 1 && data [k / 2] .comparto (data [k]) <0) {swap (k, k / 2); 2;}} public void shifdown (int père) {while (2 * père <= size) {int newfather = 2 * père; if (newfather + 1 <= size && data [newfather + 1] .compareto (data [newfather])> 0) {// data [j] if [j + 1] Celui qui prend le nouveau nouveau = newfather + 1;} (données [père] .compareto (data [newfather])> = 0) {break;} else {swap (père, newfather); // la valeur est échangée père = newfather; // newfather est (2 * père) ou (2 * père + 1), c'est-à-dire Shiftdown (newfather);}}} Public Static Void Main (String [] args) {// Créer un root de Root MaxHeap <Integer> maxHeap = new maxHeap <Integer> (100); // Enregistrer pour (int i = 0; i <100; i ++) {maxHeap.insert ((int) (math.random () * 100));} // Créer un array Integer [] Array pour (100]; // Pick à partir du tas et met le refus pour le refus pour (int i = 0; 100;Résumer
Ce qui précède est tout au sujet de l'exemple du code de tas maximum d'implémentation de la langue Java, et j'espère que cela sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!