don't stop believing

Binary Search - 이진 검색 본문

Golang/Basic

Binary Search - 이진 검색

Tongchun 2019. 5. 13. 00:35

배열에서 찾으려는 값이 있는지 이진 검색을 합니다.
배열의 범위를 2분할 하면서 찾는 방법입니다.

https://en.wikipedia.org/wiki/Binary_search_algorithm

 

Binary search algorithm - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Search algorithm finding the position of a target value within a sorted array This article is about searching a finite sorted array. For searching continuous function values, see bisec

en.wikipedia.org

Go로 구현한 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package main
import "fmt"
func main() {
searchValue := 4
arr := [10]int{1, 5, 100, 0, -100, 15, 4, 102, 30, 1000}
fmt.Println(arr)
// . .
for i := 0; i < len(arr); i++ {
for j := 0; j < len(arr)-1; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
fmt.Println(arr)
// left right .
// ( ) .
left := 0
right := len(arr) - 1
// (right) left(0) .
if right < left {
fmt.Println("Not found")
return
}
// (left, right) loop .
for left <= right {
// .
mid := (left + right) / 2
// 릿 .
if arr[mid] == searchValue {
fmt.Println("Found at position: ", mid)
return
// left .
} else if arr[mid] < searchValue {
left = mid + 1
// right .
} else {
right = mid - 1
}
}
fmt.Println("Not found")
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

찾으려는 범위를 지정하고 범위의 중간값을 비교합니다.
만약 중간값이 찾으려는 값보다 작다면 오른쪽에서 검색하고 크다면 왼쪽에서 검색합니다.

이렇게 범위를 좁혀가며 찾습니다.