Búsqueda en datos ordenados
Realice búsquedas binarias
Búsqueda en datos ordenados es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.
Por qué buscar datos ordenados
Una vez ordenado un slice, puede encontrar elementos mucho más rápido mediante la búsqueda binaria en lugar de revisar cada elemento.
El paquete sort de Go proporciona funciones auxiliares de búsqueda que se ejecutan en tiempo logarítmico.
Búsqueda lineal frente a binaria
Una búsqueda lineal comprueba cada elemento uno por uno (O(n)). La búsqueda binaria reduce a la mitad el intervalo de búsqueda en cada paso (O(log n)), pero requiere que los datos estén ordenados previamente.
sort.SearchInts
sort.SearchInts encuentra el índice donde está un valor o donde se insertaría para mantener ordenado el slice. El slice ya debe estar ordenado de forma ascendente.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 3, 5, 7, 9}
i := sort.SearchInts(nums, 5)
fmt.Println("index:", i)
}Confirmar una coincidencia
SearchInts devuelve un índice incluso si el valor no está presente: devuelve el punto de inserción. Confirme siempre el resultado comprobando i < len(s) && s[i] == target.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 3, 5, 7}
target := 4
i := sort.SearchInts(nums, target)
found := i < len(nums) && nums[i] == target
fmt.Println("index:", i, "found:", found)
}Punto de inserción
Cuando falta un valor, el índice devuelto indica exactamente dónde lo insertaría para mantener el orden. Aquí, 4 iría en el índice 2.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{1, 3, 5, 7}
i := sort.SearchInts(nums, 4)
fmt.Println("insert 4 at index:", i)
}SearchStrings
sort.SearchStrings hace lo mismo con un slice de strings ordenado.
package main
import (
"fmt"
"sort"
)
func main() {
words := []string{"apple", "cherry", "mango"}
i := sort.SearchStrings(words, "cherry")
fmt.Println("index:", i)
}La función sort.Search general
sort.Search es la función central y flexible. Se le proporciona una longitud y una función f que primero devuelve false y después true; devuelve el índice más pequeño donde f es verdadera.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{2, 4, 6, 8, 10}
i := sort.Search(len(nums), func(i int) bool {
return nums[i] >= 6
})
fmt.Println("first >= 6 at index:", i)
}Encontrar el primer elemento superior
Como sort.Search encuentra el límite donde la condición cambia a verdadera, resulta ideal para consultas como encontrar el primer valor mayor que un umbral.
package main
import (
"fmt"
"sort"
)
func main() {
scores := []int{10, 20, 30, 40}
i := sort.Search(len(scores), func(i int) bool {
return scores[i] > 25
})
fmt.Println("first > 25:", scores[i])
}Debe estar ordenado previamente
La búsqueda binaria presupone que los datos están ordenados. Si el slice no está ordenado, los resultados no tienen sentido. Ordene siempre antes de buscar.
package main
import (
"fmt"
"sort"
)
func main() {
nums := []int{9, 1, 5, 3}
sort.Ints(nums)
i := sort.SearchInts(nums, 5)
fmt.Println(nums, "-> index of 5:", i)
}Mejora del rendimiento
En un slice de un millón de elementos, una búsqueda lineal puede comprobar un millón de elementos; una búsqueda binaria comprueba unos 20. El coste de ordenar una vez se compensa con muchas búsquedas.
Elegir la función auxiliar de búsqueda
Resumen:
sort.SearchInts/SearchStrings/SearchFloat64s- slices con tipos específicossort.Search- condición personalizada sobre cualquier dato indexable
Comprobación rápida
Llama a sort.SearchInts(s, 4) sobre un slice ordenado que no contiene 4. ¿Qué devuelve?
Repaso
Buscar datos ordenados mediante búsqueda binaria:
- Los datos deben estar ordenados previamente
- Las funciones auxiliares devuelven un índice o un punto de inserción
- Confirme las coincidencias con una comprobación de igualdad
sort.Searchgestiona condiciones personalizadas
Preguntas frecuentes
¿La lección «Búsqueda en datos ordenados» es gratis?
Sí — el texto completo de «Búsqueda en datos ordenados» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Búsqueda en datos ordenados»?
Realice búsquedas binarias Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Go Academy?
No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «Búsqueda en datos ordenados»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Go Academy?
Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Ordenación de slices
- Órdenes de ordenación personalizados
- Búsqueda en datos ordenados
- Ordenación estable