Я пробовал отлаживать этот код часами. Я не знаю, почему это не переупорядочивает условия. Я пробовал все, что мог придумать. Может кто-нибудь помочь? Благодарю.Max Heapify issue
public void heapify(int i) // utility routine to percolate down from index i
{
printHeap();
int left, r, min;
Process tmp;
left = lchild(i); // left child
r = rchild(i); // right child
if(left < size() && A[left].compareTo(A[i])<0) // find smallest child
min = left; // save index of smaller child
else
min = i;
if(r < size() && A[r].compareTo(A[min])<0)
min = r; // save index of smaller child
if(min != i) // swap and percolate, if necessary
{
tmp = A[i]; // exchange values at two indices
A[i] = A[min];
A[min] = tmp;
heapify(min);
// call heapify
}// end if
printHeap();
}// end method heapify
private int lchild(int i) {
return 2 * i + 1;
}
private int rchild(int i) {
return 2 * i + 2;
}
Даже когда я звоню heapify на каждом элементе кучи это не работает:/ Вот CompareTo. Предполагается, что максимальная куча должна распределяться с использованием приоритета, а затем, если есть привязка, она переходит к уникальной полученной по времени стоимости.
public int compareTo(Process o) {
int val;
if (this.priority > o.getPriority()) {
val = -1;
} else if (this.priority == o.getPriority()) {
if (this.arrivalTime < o.getArrivalTime()) { //Earlier time
val = -1;
} else {
val = 1;
}
} else {
val = 1;
}
return val;
}
Это работает, когда я пытаюсь запустить его. Каков ваш тестовый пример, где это не так? –
Что именно вы пытаетесь сделать здесь? Вы пытаетесь переупорядочить элементы в массиве ('A' в вашем примере), чтобы сформировать правильную двоичную кучу? –
ТАК должен знать; Я принял этот комментарий, чтобы рассказать историю: «утилитарная программа для просачивания вниз от индекса i», может быть ошибочной. –