From 5418241086a4787fe72bb5b7c5ec5f38d610be8a Mon Sep 17 00:00:00 2001 From: Kelvin Prado Date: Mon, 21 Oct 2024 15:36:42 -0300 Subject: [PATCH] Create BinarySearch in Scala --- README.md | 4 ++-- src/scala/BinarySearch.scala | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/scala/BinarySearch.scala diff --git a/README.md b/README.md index 68229401..976fb00e 100644 --- a/README.md +++ b/README.md @@ -228,8 +228,8 @@ In order to achieve greater coverage and encourage more people to contribute to - - + + diff --git a/src/scala/BinarySearch.scala b/src/scala/BinarySearch.scala new file mode 100644 index 00000000..693a2f84 --- /dev/null +++ b/src/scala/BinarySearch.scala @@ -0,0 +1,23 @@ +import scala.annotation.tailrec + +def binarySearch(data: Seq[Int], target: Int): Option[Int] = { + @tailrec + def search(left: Int, right: Int): Option[Int] = { + if (left > right) None + else { + val middle: Int = (left + right) / 2 + if (data(middle) == target) Some(middle) + else if (data(middle) < target) search(middle + 1, right) + else search(left, middle - 1) + } + } + search(0, data.size) +} + +object Main extends App { + val data: Seq[Int] = Seq(0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12) + val value: Int = 11 + println( + s"Value '$value' found in position '${binarySearch(data, value).get}'" + ) +}