This commit is contained in:
krahets
2023-04-14 04:01:38 +08:00
parent cf431646e9
commit 4d318e8e6b
26 changed files with 469 additions and 295 deletions
+6 -5
View File
@@ -355,7 +355,7 @@ comments: true
/* 获取右子节点索引 */
int right(int i) {
return 2 * i + 2;
}
}
/* 获取父节点索引 */
int parent(int i) {
@@ -667,7 +667,7 @@ comments: true
void siftUp(int i) {
while (true) {
// 获取节点 i 的父节点
int p = parent(i);
int p = parent(i);
// 当“越过根节点”或“节点无需修复”时,结束堆化
if (p < 0 || maxHeap[i] <= maxHeap[p])
break;
@@ -947,7 +947,8 @@ comments: true
if (r < size() && maxHeap.get(r) > maxHeap.get(ma))
ma = r;
// 若节点 i 最大或索引 l, r 越界,则无需继续堆化,跳出
if (ma == i) break;
if (ma == i)
break;
// 交换两节点
swap(i, ma);
// 循环向下堆化
@@ -979,12 +980,12 @@ comments: true
// 判断节点 i, l, r 中值最大的节点,记为 ma
int l = left(i), r = right(i), ma = i;
// 若节点 i 最大或索引 l, r 越界,则无需继续堆化,跳出
if (l < size() && maxHeap[l] > maxHeap[ma])
if (l < size() && maxHeap[l] > maxHeap[ma])
ma = l;
if (r < size() && maxHeap[r] > maxHeap[ma])
ma = r;
// 若节点 i 最大或索引 l, r 越界,则无需继续堆化,跳出
if (ma == i)
if (ma == i)
break;
swap(maxHeap[i], maxHeap[ma]);
// 循环向下堆化