본문 바로가기
개발공부 일지/코테

이진 탐색(Binary Search)-JS, 자바스크립트

by Box Cat 2023. 2. 5.
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
반응형

댓글