Commit b98d8cd5 authored by Sina Siadat's avatar Sina Siadat Committed by Robert Griesemer

container/heap: remove one unnecessary comparison in Fix

The heap.Fix function calls both down and up.  If the element is moved
down, we don't need to call up and we could save a comparison.

(per suggestion by Radu Berinde)

Fixes #16098.

Change-Id: I83a74710e66cf0d274d8c0743338c26f89f31afe
Reviewed-on: https://go-review.googlesource.com/24273Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
parent b5e43e66
......@@ -83,8 +83,9 @@ func Remove(h Interface, i int) interface{} {
// but less expensive than, calling Remove(h, i) followed by a Push of the new value.
// The complexity is O(log(n)) where n = h.Len().
func Fix(h Interface, i int) {
down(h, i, h.Len())
up(h, i)
if !down(h, i, h.Len()) {
up(h, i)
}
}
func up(h Interface, j int) {
......@@ -98,7 +99,8 @@ func up(h Interface, j int) {
}
}
func down(h Interface, i, n int) {
func down(h Interface, i0, n int) bool {
i := i0
for {
j1 := 2*i + 1
if j1 >= n || j1 < 0 { // j1 < 0 after int overflow
......@@ -114,4 +116,5 @@ func down(h Interface, i, n int) {
h.Swap(i, j)
i = j
}
return i > i0
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment