이분 탐색은 배열의 요소들이 정렬된 상태에서 탐색하는 아주 빠른 방법.
이분 탐색 구현
let target = 32; // 32가 몇번째 있는지 찾을거임.
let arr = [23,87,65,12,57,32,99,81] // 정렬되지 않은 배열
arr.sort((a,b)=>a-b); // arr 배열을 내림차순 정렬을 한다.
let lt = 0; // 배열의 좌측 끝 값의 인덱스.
let rt = arr.length-1; // 배열의 우측 끝 값의 인덱스.
while(lt <= rt){
let mid = parseInt((lt+rt)/2); // 배열의 중간 인덱스.
if(arr[mid] == target){ // 중앙값이 타켓이랑 같으면
answer = mid + 1; // answer는 mid 인덱스 + 1 = 번째 수
break; // target을 찾있디면 반복문 그만 돌려라.
}else if(arr[mid] > target){ // 중앙값이 타겟 값보다 크면,
rt = mid - 1; // 우측 끝 값의 인덱스를 현재 mid의 바로 전, mid -1 인덱스로 초기화
}else lt= mid +1; // 중앙 값이 타겟 값보다 작으면, 좌측 끝값의 인덱스를 현재 mid의 바로다음 으로 초기화
}
return answer;
def binary_search(list,item);
lt = 0;
rt = len(list)-1
while lt <= rt:
mid = (lt + rt) / 2
if list[mid] == item:
return mid
if list[mid] > item:
rt = mid - 1
else :
lt = mid + 1
return None
my_list = [1,3,5,7,9]
print binary_search(my_list , 3) // 1
print binary_search(my_list, -1) // None
페이스북이 여러분들의 계정이 진짜로 존재하는지 확인하기 위해 여러분의 아이디를 찾아야합니다. 아이디가 "karlmageddon"이면, A부터 차례로 찾는것보다, 중간 어디쯤 찾기 시작하는게 나을수 있습니다.
이진 탐색을 사용하면 단계마다 절반의 숫자를 없앨 수 있다. O(logN)