728x90
반응형
-반복법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
function binarySearch(arr, target){
let leftIndex = 0;
let rightIndex = arr.length - 1
while(leftIndex <= rightIndex){
let middleIndex = Math.floor((leftIndex + rightIndex)/2)
if(target === arr[middleIndex]){
return middleIndex;
}
if(target < arr[middleIndex]){
rightIndex = middleIndex - 1
}else{
leftIndex = middleIndex + 1
}
}
return -1;
}
console.log(binarySearch([-5,2,4,6,10],10)) //4
console.log(binarySearch([-5,2,4,6,10],6)) //3
console.log(binarySearch([-5,2,4,6,10],20)) //-1
|
cs |
계속해서 탐색 범위가 1/2로 줄어드므로,
=> Big-O는 O(logn)
-재귀함수법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
function recursiveBinarySearch(arr, target) {
return search(arr, target, 0, arr.length-1)
}
function search(arr, target, leftIndex, rightIndex){
if(leftIndex > rightIndex){
return -1
}
let middleIndex = Math.floor((leftIndex + rightIndex)/2)
if (target === arr[middleIndex]){
return middleIndex;
}
if(target < arr[middleIndex]){
return search(arr, target, leftIndex, middleIndex-1)
}else{
return search(arr, target, middleIndex+1, rightIndex)
}
}
console.log(recursiveBinarySearch([-5,2,4,6,10],10)) // 4
console.log(recursiveBinarySearch([-5,2,4,6,10],6)) // 3
console.log(recursiveBinarySearch([-5,2,4,6,10],20)) // -1
|
cs |
계속해서 탐색 범위가 1/2로 줄어드므로,
=> Big-O는 O(logn)
728x90
반응형
'개발공부 일지 > 코테' 카테고리의 다른 글
퀵 정렬(quick Sort)/(pivot Sort) - 자바스크립트, JS (0) | 2023.06.13 |
---|---|
삽입 정렬(Insertion Sort) - 자바스크립트, JS (0) | 2023.06.12 |
프로그래머스 - 핸드폰 번호 가리기(JS, 자바스크립트)(정규표현식-전방탐색) (0) | 2023.02.02 |
프로그래머스 - 최대공약수와 최소공배수(JS, 자바스크립트) (0) | 2023.02.02 |
프로그래머스 - 저주의 숫자 3 (JS, 자바스크립트) (0) | 2023.02.02 |
댓글