抱歉,如果标题中的术语已关闭。我试图通过更频繁地使用它们来更好地理解这些术语。
无论如何,我目前正在一个数据结构类的实验室(使用 C++)中工作,我必须构建一个三元堆并将其与已经提供给我们的二元堆进行比较。由于我有一些额外的时间,我想解决我的代码中的一些细节,以便它尽可能高效地运行。
我最担心的是我正在使用的 if-else 语句的数量。实际上,我必须花十分钟在纸上组织它们的布局,以免我感到困惑。(我不是在抱怨,我只是不知道这是否是解决问题的最佳方法。)
template<class T>
void TernaryHeap<T>::trickleDown(int i) {
do {
int j = -1;
int r = right(i);
if (r < n && compare(a[r], a[i]) < 0) {
int l = left(i);
if (compare(a[l], a[r]) < 0) {
j = l;
} else {
j = r;
}
int m = mid(i);
if (compare(a[m], a[r]) < 0) {
j = m;
} else {
j = r;
}
} else {
int l = left(i);
if (l < n && compare(a[l], a[i]) < 0) {
int m = mid(i);
if (compare(a[m], a[l]) < 0) {
j = m;
} else {
j = l;
}
}
}
if (j >= 0) a.swap(i, j);
i = j;
} while (i >= 0);
}