선형 탐색이란 찾고자 하는 값을 요소마다 모두 탐색하며 찾는 방법이다.
선형 탐색은 아래와 같이 구현할 수 있다.
function linearSearch(arr, val) {
for(let x of arr) {
if(x === val) return true;
else return false;
}
}
linearSearch([1,2,3,4,5], 3) // true
선형 탐색을 사용하면 입력값이 커짐에 따라 마다 반복 횟수도 비례해서 늘어나기 때문에
시간 복잡도는 O(n)이 된다.
이진 탐색은 선형 탐색 보다 효율적으로 값을 찾을 수 있다.
시작인덱스, 중간인덱스, 마지막인덱스를 가리키는 변수를 설정하여,
찾고자 하는 값과 중간인덱스를 비교하며 탐색 범위를 축소해나가는 알고리즘이다.
이진 탐색을 코드로 구현하면 아래와 같다.
function binarySearch(arr, val) {
let start = 0;
let end = arr.length - 1;
while(start <= end) {
let mid = Math.floor((start + end) / 2);
if(arr[mid] === val) return true;
else if(arr[mid] < val) start = mid + 1;
else if(arr[mid] > val) end = mid - 1;
}
return false;
}