: 0이나 그 이상의 입력값을 가진다.
: 하나 혹은 그 이상의 출력값을 가진다.
: 각 단계는 무엇을 하기 위한 것인지 명확해야한다.
: 각 단계들은 유한한 횟수를 거친 후 종료되어야한다.
: 시간적, 공간적 효율성을 가져야한다.
[1,2,3,4,5]
와 같은 배열에서 4을 찾아내기 위해 1부터 4까지 비교해야하기 때문에 4번의 탐색을 하게 된다.const arr = [1,2,3,4,5,6,7,8,9,10];
const linearSearch = (arr, target) => {
for(let i = 0; i < arr.length; i++) {
if (arr[i] === target) {
return console.log(i, arr[i]);
}
}
return console.log('i does not exist.')
};
linearSearch(arr, 5); // 4 5
linearSearch(arr, 11); // 'i does not exist.'
const arr = [1,2,3,4,5,6,7,8,9,10];
const binarySearch = (arr, target) => {
let min = 0;
let max = arr.length -1;
// min이 max보다 작거나 같을 때까지 while문 실행
while(min <= max) {
let mid = Math.floor((min + max)/2);
if (arr[mid] === target) {
return console.log(mid, arr[mid]);
} else if (arr[mid] < target) {
// 배열 중앙값의 오른쪽에서 다시 중앙값을 탐색하기 위해
min = mid+1;
} else {
// 배열 중앙값의 왼쪽에서 다시 중앙값을 탐색하기 위해
max = mid-1;
}
}
return console.log('Target dose not exist');
}
binarySearch(arr, 6); // 5 6
binarySearch(arr, 3); // 2 3
binarySearch(arr, 11); // 'Target dose not exist'