개린이가 쓴 글이므로 오류가 있을 수 있음을 미리 알려드립니다 🐹 (꾸벅)
오늘은 이진탐색에 대해 공부를 해보겠습니다.
일반적으로 자주 쓰이는 배열의 첫번째 숫자부터 하나하나 탐색하는 것을
선형탐색이라고 합니다.
선형탐색은 의 시간복잡도를 가지고 있습니다.
오늘 알아볼 것은 이진탐색 입니다.
이진탐색의 시간복잡도는 으로
n의 숫자가 크면 클수록 선형탐색보다 이진탐색으로 탐색하는 것이 훨씬 효율적입니다.
이렇게 좋은 이진탐색을 사용하기 위해서는 조건이 있습니다.
그것은 탐색할 배열이 정렬된 상태여야 한다는 것 입니다.
하지만 swift 기본 정렬의 시간복잡도가 이기 때문에
일반적인 경우에 정렬을 하고 이진탐색을 하는 것은
선형탐색을 하는 것보다 시간복잡도면에서 비효율적일 수 있습니다.
그러니 상황을 보고 사용하는 것이 좋겠습니다 ㅎㅎ
이진 탐색은 정렬이 되어있는 배열 기준으로 탐색을 합니다.
(배열이 오름차순으로 정렬되어 있다고 가정하고 설명하겠습니다.)
func binarySearch(_ array: [Int], num: Int) -> Int? {
var start = 0
var end = array.count - 1
while start <= end {
let mid = (start + end) / 2
let guess = array[mid]
if guess == num {
return mid
} else if guess > num {
end = mid - 1
} else {
start = mid + 1
}
}
return -1
}
def solution(L, x):
start = 0
end = len(L) - 1
while start <= end :
mid = (start + end) // 2
guess = L[mid]
if guess == x :
return mid
elif guess > x :
end = mid - 1
else :
start = mid + 1
return -1