Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions solutions/cpp/binary-search/1/binary_search.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#include "binary_search.h"
#include <stdexcept>

namespace binary_search {

std::size_t find(const std::vector<int>& data, int value) {
// 1. Caso: Si el vector est谩 vac铆o, no hay nada que buscar
if (data.empty()) {
throw std::domain_error("La lista est谩 vac铆a");
}

// 2. Control de l铆mites para evitar underflows
int left = 0;
int right = static_cast<int>(data.size()) - 1;

while (left <= right) {
// Optimizaci贸n para evitar overflow
int mid = left + (right - left) / 2;

// 隆Aqui lo encontramos!
if (data[mid] == value) {
return static_cast<std::size_t>(mid);
}

// Si el valor del centro es mayor, descartamos la mitad derecha
if (data[mid] > value) {
right = mid - 1;
}
// Si el valor del centro es menor, descartamos la mitad izquierda
else {
left = mid + 1;
}
}

// 3. Si salimos del bucle, los l铆mites se cruzaron: el valor no existe
throw std::domain_error("El valor buscado no existe en la lista");
}

}
11 changes: 11 additions & 0 deletions solutions/cpp/binary-search/1/binary_search.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#pragma once
#include <vector>
#include <cstddef>

namespace binary_search {

// Busca un valor en un vector ordenado y devuelve su 铆ndice.
// Lanza std::domain_error si el valor no existe.
std::size_t find(const std::vector<int>& data, int value);

}