Функция sort.SearchInts

Функция sort.SearchInts выполняет бинарный поиск заданного числа в отсортированном слайсе целых чисел. В первый параметр передается слайс []int, во второй - искомое значение int. Функция возвращает индекс найденного элемента. Если элемент не найден, возвращается индекс, по которому его нужно вставить для сохранения порядка сортировки.

Синтаксис

gosort.SearchInts(slice, value)

Пример

Давайте найдем число 3 в отсортированном слайсе:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  nums := []int{1, 2, 3, 4, 5}
  res := sort.SearchInts(nums, 3)
  fmt.Println(res)
}

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

go2

Пример

Попробуем найти число, которого нет в слайсе:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  nums := []int{1, 2, 4, 5, 6}
  res := sort.SearchInts(nums, 3)
  fmt.Println(res)
}

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

go2

Функция вернула индекс 2, куда нужно вставить число 3, чтобы слайс остался отсортированным.

Пример

Если искомое значение меньше всех элементов слайса, функция вернет 0:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  nums := []int{5, 6, 7, 8, 9}
  res := sort.SearchInts(nums, 1)
  fmt.Println(res)
}

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

go0

Пример

Если искомое значение больше всех элементов слайса, функция вернет длину слайса:

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  nums := []int{1, 2, 3, 4, 5}
  res := sort.SearchInts(nums, 10)
  fmt.Println(res)
}

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

go5

Пример

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

gopackage main

import (
  "fmt"
  "sort"
)

func main() {
  nums := []int{5, 1, 4, 2, 3}
  res := sort.SearchInts(nums, 2)
  fmt.Println(res)
}

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

go4

Хотя число 2 находится в слайсе, функция вернула индекс 4, так как слайс не был отсортирован.

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

  • функцию sort.Search,
    которая выполняет бинарный поиск с пользовательской функцией сравнения
  • функцию sort.SearchFloat64s,
    которая ищет число с плавающей точкой в отсортированном слайсе
  • функцию sort.SearchStrings,
    которая ищет строку в отсортированном слайсе строк
  • функцию sort.Ints,
    которая сортирует слайс целых чисел по возрастанию