ヒープデータ構造を実装しようとしていますが、最大ヒープを構築するmaxHeapifyメソッドを作成し、最後に挿入して最大ヒープを維持するためにヒープを再配置する挿入メソッドで使用しました。 しかし、それは動作するようには表示されません、どんな助けていただければ幸いです。ヒープを実装する
public class Heap { // a class to implement a heap
private int[] data; // the heap array
private static final int FRONT = 1;
private int maxSize = 0;
private int currentSize; // the current size of the data in the array
public Heap(int maxSize) {
this.currentSize = 1;
this.maxSize = maxSize;
data = new int[maxSize + 1];
}
public int[] getData() {
return data;
}
public void setData(int[] data) {
this.data = data;
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int getCurrentSize() {
return currentSize;
}
public void setCurrentSize(int currentSize) {
this.currentSize = currentSize;
}
@SuppressWarnings("unused")
private int parent(int index) {// the index of the parent
return index/2;
}
private int left(int index) { // the index of the left child
return (2 * index);
}
private int right(int index) { // the index of the right child
return (2 * index) + 1;
}
private void swap(int i, int j) { // to swap two elements
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private void maxHeapify(int i) { // to build a max heap
int left = left(i); // a method to return the index of the left child
int right = right(i);// a method to return the index of the right child
int largest = i;
int x = currentSize;
if (left <= currentSize && data[left] > data[i]) {
largest = left;
}
if (right <= currentSize && data[right] > data[largest]) {
largest = right;
}
if (largest != i) {
int temp = data[i];
data[i] = data[largest];
data[largest] = temp;
maxHeapify(largest);
}
}
public void maxHeap() {
for (int i = currentSize/2; i >= 1; i--) {
maxHeapify(i);
}
}
public void insert(int newData) { // insert to the heap
data[currentSize] = newData;
currentSize++;
maxHeapify(FRONT);
}
public int deleteMax() { // delete max from the heap
int maxValue = data[FRONT];
data[FRONT] = data[data.length - 1];
maxHeapify(FRONT);
currentSize--;
return maxValue;
}
public void sort() {// heap sort
maxHeap();
for (int i = maxSize; i > 1; i--) {
swap(FRONT, maxSize);
maxSize--;
maxHeapify(FRONT);
}
}
public void clear() {
maxSize = 0;
}
public boolean isEmpty() {
return maxSize == 0;
}
public boolean isFull() {
return currentSize == data.length;
}
public void printHeap() {// prints the heap
for (int i = 1; i <= maxSize/2; i++) {
System.out.print(
" PARENT : " + data[i] + " LEFT CHILD : " + data[2 * i] + " RIGHT CHILD :" + data[2 * i + 1]);
System.out.println();
}
}
}
どうしますか?結果とは何ですか?それは何でしょうか? –
@ M.Schwarzer-Haverbierは、5,3,17,10,84,19,6,22,9を挿入しようとしました。結果は私が得た 親:17左の子供:右の子供:5 親:3左の子供:10右の子:84 PARENT:5左の子:19右の子:6 PARENT:10左の子:22右の子:84左の子:22右の子:19 PARENT:22 9 それは PARENTどうあるべきか左の子供:17右の子供:10 親:19左の子供:5右の子供:6 親:17左の子供:3右の子供:9 – fareed
私は組み込みで使用できるカスタムデータ構造を実装する理由がわかりませんデータ構造http://www.journaldev.com/1642/java-priority-queue-priorityqueue-example –