Методы поиска элемента в срезе Go (Golang)

Чтобы найти элемент в срезе языка программирования Go, вы можете использовать различные методы. Вот несколько примеров:

Метод 1: линейный поиск
Вы можете перебирать элементы среза и сравнивать каждый элемент с целевым значением.

package main
import (
    "fmt"
)
func linearSearch(slice []int, target int) bool {
    for _, element := range slice {
        if element == target {
            return true
        }
    }
    return false
}
func main() {
    slice := []int{1, 2, 3, 4, 5}
    target := 3
    found := linearSearch(slice, target)
    fmt.Println("Element found:", found)
}

Метод 2: двоичный поиск (только для отсортированных срезов)
Если срез отсортирован, вы можете использовать двоичный поиск для более быстрого поиска элементов.

package main
import (
    "fmt"
    "sort"
)
func binarySearch(slice []int, target int) bool {
    low := 0
    high := len(slice) - 1
    for low <= high {
        mid := (low + high) / 2
        if slice[mid] == target {
            return true
        } else if slice[mid] < target {
            low = mid + 1
        } else {
            high = mid - 1
        }
    }
    return false
}
func main() {
    slice := []int{1, 2, 3, 4, 5}
    sort.Ints(slice) // Ensure the slice is sorted
    target := 3
    found := binarySearch(slice, target)
    fmt.Println("Element found:", found)
}

Метод 3: использование функции sort.Search.
Пакет sortв Go предоставляет функцию Search, которую можно использовать для поиск элементов в отсортированном фрагменте.

package main
import (
    "fmt"
    "sort"
)
func main() {
    slice := []int{1, 2, 3, 4, 5}
    sort.Ints(slice) // Ensure the slice is sorted
    target := 3
    index := sort.Search(len(slice), func(i int) bool { return slice[i] >= target })
    found := index < len(slice) && slice[index] == target
    fmt.Println("Element found:", found)
}