필요요소: arr , startIdx , endIdx , midIdx , target
이진탐색은 진행할 때 마다 중간을 기준으로 탐색해야하는 데이터의 개수를 절반씩 줄여 나가기 때문에 시간복잡도 O(log N)
최악의 경우에 (1/2)^k * N = 1
이 될 때까지 탐색을 하게 되기때문에 k = logN
이 되어 O(logN)
의 시간복잡도를 가진다.
확인하는 데이터의 개수가 절반씩 줄어드는 특징 → 퀵정렬과 동일하다.
def search(arr,target,start,end):
if start>end:
return None
mid=(start+end)//2
if arr[mid]==target:
return mid
elif arr[mid] > target:
return search(arr,target,start,mid-1)
else:
return search(arr,target,mid+1,end)
def binary_search(arr, target, start, end):
while start<= end:
mid= (start+end)//2
if arr[mid] == target:
return mid
elif arr[mid] > target:
end=mid-1
else:
start=mid+1
return start
경험상 마지막 부분 return start
는 while 문 조건이 start <= end
로 끝나야 반복문이 종료되기 때문이다.
start:0 end:1 mid:0 arr[mid]:10 cur:5
> start:0,end:-1,mid:0
> return 0
start:0 end:0 mid:0 arr[mid]:10 cur:15
> start:1,end:0,mid:0
> return 0
이진 검색은 구간을 탐색하는데 사용한다.
내가 매번 실수하는 부분이라서 다음 문제의 후기를 잊어버릴 때마다 읽어 보자