def sink(k)
      while (j = (2 * k)) <= @length do
        j += 1 if j < @length && ! ordered?(j, j+1)
        break if ordered?(k, j)
        swap(k, j)
        k = j
      end
    end
def sink(k)
      while (j = (2 * k)) <= @length do
        j += 1 if j < @length && ! ordered?(j, j+1)
        break if ordered?(k, j)
        swap(k, j)
        k = j
      end
    end
Percolate down to maintain heap invariant.

 @param [Integer] k
   The index at which to start the percolation.

 @!visibility private