Powered by AppSignal & Oban Pro

Algo Binary search

Algorithme/binary_search.livemd

Retour vers le sommaire des tips Accueil

Algo Binary search

defmodule BinarySearch do
  def search(list, target) do
    do_search(list, target, 0, length(list) - 1, 0)
  end

  defp do_search(_, _, left, right, iterations) when left > right, do: {:not_found, iterations}

  defp do_search(list, target, left, right, iterations) do
    mid = div(left + right, 2)
    mid_value = Enum.at(list, mid)

    cond do
      target == mid_value -> {:ok, mid, iterations + 1}
      target < mid_value -> do_search(list, target, left, mid - 1, iterations + 1)
      target > mid_value -> do_search(list, target, mid + 1, right, iterations + 1)
    end
  end
end
tableau = Enum.to_list(0..100)
numberToGuess = :rand.uniform(100)

case BinarySearch.search(tableau, numberToGuess) do
  {:ok, index, iterations} ->
    IO.puts(
      "Le nombre #{numberToGuess} a été trouvé à l'index #{index} en #{iterations} itérations."
    )

  {:not_found, iterations} ->
    IO.puts(
      "Le nombre #{numberToGuess} n'a pas été trouvé dans le tableau. Recherche effectuée en #{iterations} itérations."
    )
end