Cómo escribir un programa para implementar la búsqueda binaria

Esta es una forma (Tcl):

proc binarySearch {objetivo de datos} {
establecer menor 0
set upper [expr {[llength $ data] – 1}]
mientras que 1 {
establecer actual [expr {($ más bajo + $ más alto) / 2}]
establecer valor [lindex $ data $ current]
if {$ value == $ goal} {
return $ actual
} elseif {$ lower == $ upper} {
volver -1
} elseif {$ valor <$ objetivo} {
establecer más bajo [expr {$ current + 1}]
} más {
establecer superior [expr {$ actual – 1}]
}
}
}

data son una lista ordenada (matriz para personas que no son Tclers) de valores. El principio es establecer dos límites, lower y upper , mirar el valor en el floor(average(lower, upper)) índice floor(average(lower, upper)) y ajustar los límites si el objetivo aún no se encuentra. Si los límites son iguales y no se encuentra el objetivo, nunca lo vamos a encontrar.