이진탐색
데이터가 정렬 되어있는 상황에서 특정 요소를 효율적으로 탐색하는 방법입니다.
오름차순으로 정렬 되어있는 A 배열 [1, 2, 3, 4, 5, 6, 7] 이 있습니다. 저희는 6을 찾고 싶습니다.
만약 선형탐색이라면 1 거치고 2 거치고 해서 6까지 가야하기 때문에 6번을 거쳐야 합니다. O(n)
이진 탐색을 이용한다면 3번만 거치면 6을 찾을 수 있습니다. O(logN)
구현 방법
- 이진 탐색을 구현하는 방법은 주어진 배열의 첫번째 인덱스와 마지막 인덱스를 변수로 선언합니다.
- 마지막 인덱스를 2로 나워 Mid 변수로 선언합니다.
- Mid 인덱스에 위치하고 있는 value 값과 찾으려는 element 크기를 비교합니다.
- Mid 값 > 찾으려는 값 이면 마지막 인덱스를 Mid - 1 값으로 초기화 합니다.
- Mid 값 < 찾으려는 값 이면 마지막 인덱스를 Mid +1 1 값으로 초기화 합니다.
- 찾으려는 값을 만날 때 까지 1~5 반복합니다.
코드
let arr = [1, 2, 3, 4, 5, 6, 7]
func binarySearch(_ element: Int) -> Bool {
var left = 0
var right = n - 1
while left <= right {
let mid = (left+right) / 2
let value = arr[mid]
if value == element {
return true
} else if value > element {
right = mid - 1
} else {
left = mid + 1
}
}
return false
}
반응형
'알고리즘' 카테고리의 다른 글
[프로그래머스] 배열의 원소 삭제하기 (6) | 2023.10.12 |
---|---|
[Hash] Rabbits in Forest - LeetCode Swift (0) | 2021.08.25 |
[BFS] 음식물 피하기 - baekjoon Swift (2) | 2021.08.24 |
[DFS] N과 M - baekjoon Swift (0) | 2021.08.23 |
[투포인터] Container With Most Water - LeetCode Swift (2) | 2021.08.18 |