Ошибка реализации minHeap
Я пытаюсь реализовать minHeap размера k.
Хотя свойства min-heap поддерживаются в созданном массиве, значения не верны.
Пример => k=5; вход: 5,3,9,6,13,1; вывод: 1 3 5 6 13 в то время как правильный вывод должен быть 3,5,6,9,13
Мой код:
public class Heap {
private int size;
private static int[] heap;
private int pos;
private int requiredSize;
Heap(int k){
heap= new int[k+2];
requiredSize=k+2;
size=0;
heap[0]=0;
}
public void insert(int e){
heap[++size]=e;
pos=size;
while(heap[pos]<heap[getParent(pos)]){
swap(pos,getParent(pos));
correctChildren(pos);
pos=getParent(pos);
}
}
public int getMin(){
return heap[1];
}
public void correctChildren(int pos){
if(pos%2==0){
if(pos+1<size && heap[pos]>heap[pos+1]){
swap(pos,pos+1);
}
}
else{
if(heap[pos]<heap[pos-1]){
swap(pos,pos-1);
}
}
}
public int getParent(int pos){
return pos/2;
}
public int getRightChild(int pos){
return 2*pos+1;
}
public int getLeftChild(int pos){
return pos*2;
}
public void swap(int f, int s){
int temp=heap[f];
heap[f]=heap[s];
heap[s]=temp;
}
public static int[] getHeap(){
return heap;
}
}