이진 검색
Javascript 반복 방법
function binarySearchIterative(arr, x, l, h) {
while (l <= h) {
mid = Math.floor((l + h) / 2);
if (arr[mid] === x) {
return mid;
} else {
if (arr[mid] > x) {
h = mid - 1;
} else {
l = mid + 1;
}
}
}
return -1;
}
자바스크립트 재귀 메서드
function binarySearchRecursive(arr, x, l, h) {
if (l <= h) {
mid = Math.floor((l + h) / 2);
if (arr[mid] === x) {
return mid;
} else {
if (arr[mid] > x) {
return binarySearchRecursive(arr, x, l, mid - 1);
} else {
return binarySearchRecursive(arr, x, mid + 1, h);
}
}
}
return -1;
}
설명
binarySearch 함수는 배열, 찾고 있는 값
x
, 배열의 첫 번째 위치low
및 마지막 위치high
의 네 가지 매개변수를 받습니다.low
가 high
보다 작거나 같을 때 어레이를 순회할 것입니다. 왜냐하면 그들은 두 말단에 있어야 하기 때문입니다. 흥미롭고 값을 찾지 못하면 -1을 반환합니다.배열이 이미 정렬되어 있기 때문에 전체 배열을 탐색하는 것을 피하기 위해 이진 검색 알고리즘은 배열의 중간을 계산하고 중간에 있는 값이
low
와 같은지 확인합니다. 그렇다면 위치를 반환합니다. 그렇지 않은 경우 중간 값이 high
보다 크거나 작은지 계산하여 배열의 어느 부분을 살펴볼 가치가 있는지 확인합니다.가운데 값이
x
보다 크면 직전의 경우가 신품x
이 되고, 중간의 값이 x
보다 작으면 직후의 경우가 신품high
이 됩니다. 즉, x
를 찾을 때까지 간격이 줄어듭니다. low
가 배열에 없으면 한 순간에 x
가 x
보다 크고 순회가 중지되기 때문에 -1을 반환합니다.삽화
우리가 찾고 있는 값은 4입니다.
먼저 배열의 중간인 3을 계산합니다. array[3]은 우리가 찾고 있는 값의 4보다 작은 6이므로 3이 새로운 최고값이 되기 전에 간격을 줄입니다.
루프의 두 번째 패스에서 2와 같은 중간 값을 다시 계산합니다. array[2]는 4입니다. 즉, x를 찾은 다음 2를 반환합니다.
복잡성 분석
전체 배열을 순회하지 않기 때문에 이진 검색 알고리즘의 시간 복잡도는 O(log n)이고 추가 공간을 사용하지 않기 때문에 공간 복잡도는 O(1)입니다.
결론
이진 검색은 시간 복잡도가 O(log n)인 정렬된 배열에서 값을 찾는 데 도움이 되는 알고리즘임을 요약할 수 있습니다. 이 글을 읽고 새로운 것을 배우기를 바랍니다. 기사.
Reference
이 문제에 관하여(이진 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/niemet0502/binary-search-2b9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)