Saltar al contenido

Recorrido narrado

Buscar algo que no está

Buscas 20 en [3, 8, 15, 21, 30, 42, 57].

  1. [0, 7), medio 3: 21 no es menor que 20, alto ← 3.
  2. [0, 3), medio 1: 8 es menor que 20, bajo ← 2.
  3. [2, 3), medio 2: 15 es menor que 20, bajo ← 3.
  4. [3, 3): vacío. Devuelve 3.

En la figura están los cuatro pasos; lo atenuado es lo que la búsqueda ya descartó.

Buscar el 20, que no está, en cuatro pasosCuatro pasos sobre 3, 8, 15, 21, 30, 42 y 57. Paso 1: bajo 0, alto 7, medio 3 con valor 21, que no es menor que 20, así que alto pasa a 3. Paso 2: intervalo [0, 3), medio 1 con valor 8, menor que 20, así que bajo pasa a 2; las posiciones 3 a 6 quedan atenuadas. Paso 3: intervalo [2, 3), medio 2 con valor 15, menor que 20, así que bajo pasa a 3; quedan atenuadas todas menos el medio. Paso 4: bajo y alto valen 3, el intervalo está vacío y se devuelve 3, donde estaría el 20 si se insertara.Paso 1 de 4: [0, 7), medio 3. 21 no es menor que 20: alto ← 33815213042570123456bajo = 0alto = 7Paso 2 de 4: [0, 3), medio 1. 8 es menor que 20: bajo ← 23815213042570123456bajo = 0alto = 3Paso 3 de 4: [2, 3), medio 2. 15 es menor que 20: bajo ← 33815213042570123456bajo = 2alto = 3Paso 4 de 4: [3, 3) vacío. Devuelve 3: ahí iría el 203815213042570123456bajo = alto = 3
Atenuado: lo descartado. Borde grueso: el medio que se compara. En cada paso el intervalo se reduce a la mitad.

La posición 3 tiene 21, que no es 20: el valor no está. Pero 3 es justo donde habría que insertarlo para mantener el orden. Por eso esta versión devuelve una posición y no «sí o no»: quien llama comprueba si bajo < longitud(a) y a[bajo] = x.

En cada paso el intervalo se reduce a la mitad. Con n valores, como mucho ⌈log₂(n + 1)⌉ comparaciones: 20 para un millón. Es O(log n) en el peor caso, si el array está ordenado.

Su fila en la tabla de costos

La búsqueda binaria abre la tabla de conjunto y diccionario, con el array sin ordenar como alternativa simple:

Representación buscar(k)
array sin ordenar O(n), peor caso
array ordenado O(log n), peor caso, si está ordenado y se lee cualquier posición en O(1)

Lee el recorrido de esta página. Al pasar al siguiente momento, este cuenta como leído.