I'm trying to implement a queue of patients using a heap (with root smaller than children) but when I print the queue, the queue of patients doesn't look prioritized.
Insertion method works fine but it's the enqueue that doesn't prioritize items?
// Heap class .....some code //insertion: inserts patients into minimum heap using an array. //expand array as needed and reorder heap to maintain its properties public void insert(ER_Patient patient) { if(heapArray.length==count) expand(); heapArray[count] = patient; count++; if(count>1) reorder(); } // Priority Queue class .......some code public void enqueue(ER_Patient patient) { try { heap.insert(patient); } catch (NoSuchCategoryException exception) { System.out.println("Can't enqueue"); } } // copy content of original's array to a new larger array private void expand(){ ER_Patient[] tempArray = new ER_Patient[heapArray.length * 8]; for(int i=0;i<=heapArray.length-1;i++) tempArray[i]=heapArray[i]; heapArray = tempArray; } // maintain heap property by keeping roots smaller than children private void reorder(){ ER_Patient temp; int next = count -1; temp = heapArray[next]; while((next!=0) && temp.compareTo(heapArray[(next-1)/2])<0){ heapArray[next] = heapArray[(next-1)/2]; next = (next-1)/2; } heapArray[next] = temp; }
nextin thereorder()method in the sentenceint next = count -1;? and also when you swap items it seems that you swap with the element in position(N-1)/2I guess you have to do it with the element atN/2. Just a guess anyway