我正在编写一个 Heap(Max-Heap,意思是最大元素是根)类,可用于“堆化”给定的一组对象。我知道这个堆的一般结构以及各种算法。现在对于一般对象,没有定义比较。所以我需要定义两个对象之间的比较。我的问题是这个比较函数应该定义在类堆中还是类对象中?如果我在堆类中定义它,那么对于我使用的每个数据结构,我都需要重写效率不高的比较函数。这是因为如果我稍微更改对象,我最终可能会在大量位置更改比较。那么这件事情是怎么处理的呢?谢谢你。
class Object{
int value;
Object (int a) {
value=a;
}
boolean isLessThan(Object a, Object b){
if (a.value<=b.value){
return true;
}
else return false;
}
}
class Heap{
Object [] heap=new Object[1000];
int size=0;
Heap() {
}
void HeapifyDownwards (int index){
int left_child=2*index+1;
int right_child=2*index+2;
if (size>right_child){
// both right and left child exist
Object right= heap[right_child];
Object left= heap[left_child];
Object node = heap[index];
if ((isLessThanEqualTo(right,node)) && (isLessThanEqualTo(left,node))){
return;
}
}
else if (size==right_child){
//only left child exists
}
else {
// no child exists
}
}
}