关于java:Java实现小顶堆和大顶堆

45次阅读

共计 1272 个字符,预计需要花费 4 分钟才能阅读完成。

public class HeapNode{

private int size;// 堆大小
private int[] heap;// 保留堆数组
// 初始化堆
public HeapNode(int n) {heap = new int[n];
    size = 0;
}
// 小顶堆建堆
public void minInsert(int key){
    int i = this.size;
    if (i==0) heap[0] = key;
    else {while (i>0 && heap[i/2]>key){heap[i] = heap[i/2];
            i = i/2;
        }
        heap[i] = key;
    }
    this.size++;
}
// 大顶堆建堆
public void maxInsert(int key){
    int i = this.size;
    if (i==0) heap[0] = key;
    else {while (i>0 && heap[i/2]<key){heap[i] = heap[i/2];
            i = i/2;
        }
        heap[i] = key;
    }
    this.size++;
}
// 小顶堆删除
public int minDelete(){if (this.size==0) return -1;
    int top = heap[0];
    int last = heap[this.size-1];
    heap[0] = last;
    this.size--;
    //[金属期货](https://www.gendan5.com/cf/mf.html) 堆化
    minHeapify(0);
    return top;
}
// 大顶堆删除
public int maxDelete(){if (this.size==0) return -1;
    int top = heap[0];
    int last = heap[this.size-1];
    heap[0] = last;
    this.size--;
    // 堆化
    maxHeapify(0);
    return top;
}
// 小顶堆化
public void minHeapify(int i){
    int L = 2*i,R=2*i+1,min;
    if (L<=size && heap[L] < heap[i]) min = L;
    else min = i;
    if (R <= size && heap[R] < heap[min]) min = R;
    if (min!=i){int t = heap[min];
        heap[min] = heap[i];
        heap[i] = t;
        minHeapify(min);
    }
}
// 大顶堆化
public void maxHeapify(int i){
    int L = 2*i,R=2*i+1,max;
    if (L<=size && heap[L] > heap[i]) max = L;
    else max = i;
    if (R <= size && heap[R] > heap[max]) max = R;
    if (max!=i){int t = heap[max];
        heap[max] = heap[i];
        heap[i] = t;
        maxHeapify(max);
    }
}
// 输入堆
public void print(){for (int i = 0; i < this.size; i++) {System.out.print(heap[i]+" ");
    }
    System.out.println();}

}

正文完
 0