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.119 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.118 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.117 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.116 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.115 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.114 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.113 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.111 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.110 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.109 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.108 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.107 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.106 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.105 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.104 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.103 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.102 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.101 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.100 tracks/scala/exercises/binary-search/example.scala
trackler-2.2.1.99 tracks/scala/exercises/binary-search/example.scala