Hej alle
Ved ikke om det er det rigtige sted jeg er kommet hen, men jeg prøver
Jeg skal lave en algoritme som sortere heap.
Lige nu har jeg et maxHeap, som sortere efter tallene er høj til lav, men vil gerne have lavet et minHeap, som skal sortere tallene efter lav til høj.
Håber der er noget der kan hjælpe.
PQHeap
- public class PQHeap implements PQ{
-
- Element[] A;
- int maxElms;
-
- public PQHeap(int maxElms){
- A = new Element[1];
- this.maxElms = maxElms;
- }
-
- public void minHeapify(int i){
- int l = left(i);
- int r = right(i);
- int largest;
- if(l <= A.length-1 && A[l].key > A[i].key){
- largest = l;
- }else{
- largest = i;
- }
- if(r <= A.length-1 && A[r].key > A[largest].key){
- largest = r;
- }
- if(largest != i){
- Element temp = A[i];
- A[i] = A[largest];
- A[largest] = temp;
- minHeapify(largest);
- }
- }
-
- public int parent(int i){
- return (i/2);
- }
-
- public int left(int i){
- return (2*i);
- }
-
- public int right(int i){
- return ((2*i)+1);
- }
-
- @Override
- public Element extractMin() {
- Element min = A[1];
- A[1] = A[A.length-1];
- A = Arrays.copyOf(A, A.length-1);
- minHeapify(1);
- return min;
- }
-
- @Override
- public void insert(Element e) {
- A = Arrays.copyOf(A, (A.length+1));
-
- A[A.length-1] = e;
-
- int i = A.length-1;
-
- while(i > 1 && A[parent(i)].key < A[i].key){
- Element temp = A[i];
- A[i] = A[parent(i)];
- A[parent(i)] = temp;
- i = parent(i);
- }
- minHeapify(1);
- }
- }
Element
- public class Element {
-
- public int key;
- public Object data;
-
- public Element(int i, Object o) {
- this.key = i;
- this.data = o;
- }
-
- }
PQ
- public interface PQ {
-
- public Element extractMin();
-
- public void insert(Element e);
- }