Sha256: b7516df02123df804cc3d8b370cb8fe909311b562d5f8983a7fcef0d7f6b1d77

Contents?: true

Size: 697 Bytes

Versions: 168

Compression:

Stored size: 697 Bytes

Contents

import scala.annotation.tailrec

object BinarySearch {
  def find[T](seq: Seq[T], value: T)(implicit ord: T => Ordered[T]): Option[Int]
    = searchInternal(seq, value, 0, seq.size - 1)

  @tailrec
  def searchInternal[T](seq: Seq[T], value: T,
                        start: Int, end: Int)(implicit ord: T => Ordered[T]): Option[Int] = {
    if (end < start || start < 0)
      None
    else {
      val middle = Math.floor(0.5 * (start + end)).asInstanceOf[Int]
      val elem = seq(middle)
      if (elem == value)
        Some(middle)
      else if (value < elem)
        searchInternal(seq, value, start, middle - 1)
      else
        searchInternal(seq, value, middle + 1, end)
    }
  }
}

Version data entries

168 entries across 168 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.179 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.178 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.177 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.176 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.175 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.174 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.173 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.172 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.171 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.170 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.169 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.167 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.166 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.165 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.164 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.163 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.162 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.161 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.160 tracks/scala/exercises/binary-search/example.scala