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.139 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.138 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.137 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.136 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.135 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.134 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.133 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.132 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.131 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.130 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.129 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.128 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.127 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.126 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.125 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.124 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.123 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.122 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.121 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.120 tracks/scala/exercises/binary-search/example.scala