15.08.2022 19:Aug
Я наконец закончил первую статью из своего планируемого цикла статей для погромистов и не только.
В ней я подробно разобрал, что такое «бинарный поиск» и как оно работает — с картинками, блок-схемами и так далее, а также написал пример его реализации на Golang.
Полностью копировать сюда всю статью не стану, но покажу пару ее частей. Например, блок-схема бинарного поиска выглядит так:
В статье подробно рассмотрен принцип действия этого алгоритма и обоснована его необходимость как такового. За подробностями добро пожаловать на страничку статьи на моем блоге. Комментариям и прочему буду рад и там, и тут.
В ней я подробно разобрал, что такое «бинарный поиск» и как оно работает — с картинками, блок-схемами и так далее, а также написал пример его реализации на Golang.
Полностью копировать сюда всю статью не стану, но покажу пару ее частей. Например, блок-схема бинарного поиска выглядит так:
А его полная реализация на Go так:
Код:
package main
import (
"fmt"
"strconv"
)
func main() {
var elems, lookingFor int
fmt.Print("Number of elements? ")
fmt.Scan(&elems)
var array = make([]int, elems)
fmt.Print("Generated array: ")
for i := 0; i < elems; i++ {
array[i] = i
fmt.Print(strconv.Itoa(i) + " ")
}
fmt.Println()
fmt.Println("What are we looking for:")
fmt.Scan(&lookingFor)
var assumption, result = binarySearch(&array, lookingFor)
if result {
fmt.Println("Found: " + strconv.Itoa(assumption))
} else {
fmt.Println("Nothing found!")
}
}
func binarySearch(array *[]int, lookingFor int) (int, bool) {
fmt.Println("Looking for...")
var mid, assumption int
min := 0
high := len(*array) - 1
for min <= high {
mid = (min + high) / 2
assumption = mid
if assumption == lookingFor {
return assumption, true
}
if assumption > lookingFor {
high = mid - 1
} else {
min = mid + 1
}
}
return 0, false
}
В статье подробно рассмотрен принцип действия этого алгоритма и обоснована его необходимость как такового. За подробностями добро пожаловать на страничку статьи на моем блоге. Комментариям и прочему буду рад и там, и тут.