Функция slices.BinarySearch

Функция slices.BinarySearch выполняет бинарный поиск элемента в отсортированном слайсе. В первый параметр передается слайс, в котором производится поиск. Во второй параметр передается значение, которое нужно найти. Функция возвращает два значения: индекс элемента в слайсе и булево значение, указывающее, был ли элемент найден. Если элемент найден, возвращается его индекс и true. Если элемент не найден, возвращается индекс, куда его можно вставить, сохраняя сортировку, и false.

Важно: слайс должен быть отсортированным по возрастанию. Если слайс не отсортирован, результат работы функции будет непредсказуемым.

Синтаксис

goslices.BinarySearch(slice, target)

Пример

Давайте найдем элемент 5 в отсортированном слайсе []int{1, 2, 3, 4, 5, 6}:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  nums := []int{1, 2, 3, 4, 5, 6}
  target := 5

  index, found := slices.BinarySearch(nums, target)
  fmt.Printf("Index: %d, Found: %t\n", index, found)
}

Результат выполнения кода:

go"Index: 4, Found: true"

Пример

Давайте попробуем найти элемент 10, которого нет в слайсе []int{1, 2, 3, 4, 5, 6}:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  nums := []int{1, 2, 3, 4, 5, 6}
  target := 10

  index, found := slices.BinarySearch(nums, target)
  fmt.Printf("Index: %d, Found: %t\n", index, found)
}

Результат выполнения кода:

go"Index: 6, Found: false"

Пример

Давайте найдем строку "c" в отсортированном слайсе строк []string{"a", "b", "c", "d", "e"}:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  letters := []string{"a", "b", "c", "d", "e"}
  target := "c"

  index, found := slices.BinarySearch(letters, target)
  fmt.Printf("Index: %d, Found: %t\n", index, found)
}

Результат выполнения кода:

go"Index: 2, Found: true"

Пример

Давайте найдем строку "z" в слайсе строк []string{"a", "b", "c", "d", "e"}:

gopackage main

import (
  "fmt"
  "slices"
)

func main() {
  letters := []string{"a", "b", "c", "d", "e"}
  target := "z"

  index, found := slices.BinarySearch(letters, target)
  fmt.Printf("Index: %d, Found: %t\n", index, found)
}

Результат выполнения кода:

go"Index: 5, Found: false"

Смотрите также

  • функцию slices.BinarySearchFunc,
    которая выполняет бинарный поиск с использованием пользовательской функции сравнения
  • функцию slices.Sort,
    которая сортирует слайс перед выполнением бинарного поиска
  • функцию slices.Contains,
    которая проверяет наличие элемента в слайсе без требования сортировки
  • функцию slices.Index,
    которая возвращает индекс первого вхождения элемента в слайсе