최대 스택
가장 큰 힙은 부모 요소가 자식 요소보다 크고 완전히 이진 트리라는 것입니다.
데이터 [1] 저장을 시작하고 데이터 [0]은 비어 있고 사용되지 않습니다. 데이터 [0]을 크기로 사용할 수도 있습니다.
공개 클래스 MaxHeap <t는 비슷한 <? SUPER T >> {private t [] data; private int size; private int capacity; public maxHeap (int capacity) {int factions) {the.data = (t []) 새로운 비슷한 [용량 + 1]; size = 0; this.capacity = 용량;} public int size () {return this.size; this.capacity;}/** * @return 최대 루트를 봅니다 (popmax와 비교하여 삭제 없이만 참조하십시오) */public t seetmax () {return data [1];} public void swap (int i, int j) {if (i! = j) {t temp = data [i] = data [J]; data [j] = temp; {size ++; data [size] = item; item; siftup (size);}/*** @@return 팝 최대 루트 (팝업은 seekMax와 비교)*/public t popmax () {swap (1, size-); ShiftDown (1); return data [size+1];}/*** @ @holly corner mark의 하위 코너 마크입니다. * / public void shiftup (int child) {while (while> 1 && data [child] .compareto (data [child / 2])> 0) {스왑 (child, child / 2); child = child / 2;}} / *** @param 데이터 배열의 요소의 더 낮은 코너 마크* @param b lower corner mark* / retor int inthint in that extren is that extren is thant al a, int b) {if (data [a] .compareto (data [b]) <0) {// data [b] big return b; // return b} else {// data [a] big return a; // return a}}/*** @param 데이터 배열에서 요소의 낮은 코너 마크* @param a aparam a a a aparam coram mark* @param cparam a a a a a holder mark* @param a @param a a a a a a a a a afaram coram a a a a a a a a a a a a a a a a a a). Array* @return 요소의 하단 코너 마크를 반환하면*/private int max (int a, int b, int c) {int a, int b, int c) {int 가장 큰 = max (a, b); 가장 큰 = max (가장 큰, c); @param 아버지 부모 노드의 더 낮은 코너 마크는 아버지이며, 왼쪽과 오른쪽 자녀의 하위 코너 테이블은 다음과 같습니다. (true) {int lchild = 아버지 * 2; // 왼쪽 자녀 int rchild = 아버지 * 2 + 1; // 오른쪽 자녀 int newfather = 아버지; // Newfather가 업데이트 될 예정입니다. 부모, 왼쪽 및 오른쪽 노드의 하단 코너 마크는 누구입니까? if (lchild> size) {// 아버지 노드에 왼쪽 자녀가 없거나 오른쪽 자녀가 돌아 오지 않는 경우;} else (rchild> size) {// 아버지 노드에 오른쪽 자녀가 없다면, 오른쪽 자녀가 없다면 (아버지, lchild); 아버지) {// 아버지는 아동 노드보다 크고 테이블 이름이 이미 큰 루트 힙이라는 것을 의미하므로 반품을 계속 조정할 필요가 없습니다.} else {// 그렇지 않으면 큰 루트 힙 조건이 스왑 (아버지, 신약)이 충족 될 때까지 힙을 계속 조정해야합니다. ShiftDown (Newfather)}}} public static void main (string [] args) {// 큰 루트 힙 생성 maxHeap <integer> maxHeap = new maxHeap <integer> (100); // (int i = 0; i <100; i ++) {maxHeap.insert ((int) * (math.random () *); = 새 정수 [100]; // 힙에서 선택하여 (int i = 0; i <100; i ++) {arr [i] = maxHeap.popMax (); system.out.print (arr [i]+"");} system.out.println ()}최대 힙 : ShiftDown () 함수는 위와 다릅니다
공개 클래스 MaxHeap <t는 비슷한 <? SUPER T >> {private t [] data; private int size; private int capacity; public maxHeap (int capacity) {int capacity) {data = (t []) 새로운 비슷한 [용량 + 1]; this.capacity = 용량; size = 0;} public int size (} public int size (} public boolean isempty () {return size == 0;} public void insert (t + 1) {size + 1]. 항목; size ++; shiftup (size);}/** * @return pop max root (팝업은 seekMax와 비교하여 삭제를 의미합니다) */public t popmax () {t ret = data [1]; Swap (1, size); size-; shiftdown (1); return ret;}/** * @Return (popmeat vistion) */pubmax와 비교). data [1];} public void swap (int i, int j) {if (i! = j) {t temp = data [i]; data [j]; data [j] = temp;}} public void shiftup (int k) {while (k> 1 && data [k / 2]. compareto (k / 2); k / 2); 2;}} public void shiftdown (int father) {while (2 * 아버지 <= size) {int newfather = 2 * 아버지; if (newfather + 1 <= size && data [newfather + 1] .compareto (data [newfather])> 0) {// data [j] data [j + 1] 큰 새로 + 1; (데이터 [아버지] .compareto (data [newfather])> = 0) {break;} else {else {아버지, Newfather); // 값은 아버지 = Newfather; // Newfather는 (2*아버지+1), 즉 교대 (Newfather); MaxHeap <integer> maxHeap = new maxHeap <integer> (100); // (int i = 0; i <100; i ++) {maxHeap.insert ((int) (int) (ath.random () * 100)); i ++) {arr [i] = maxHeap.popMax (); system.out.print (arr [i]+"");} system.out.println ();}}요약
위의 모든 것은 Java 언어 구현 최대 힙 코드의 예에 관한 것이므로 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!