Ошибка реализации 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;
    }
}

0 ответов

Другие вопросы по тегам