검색 : 특정 값을 찾는 일
선형 검색 : 정렬된 값 or 정렬되지 않은값 모두 사용가능한 검색
이진 검색 : 정렬된 값일때 사용가능한 검색
선형 검색
1. 배열의 0번째 인덱스부터 전체를 접근 하여 값을 찾는 검색
2. 시간복잡도 : O(n)
var arr1 = [1,3,5,7,9]
var arr2 = [2,4,6,8,10]
function linearSearch(arr, num) {
for(var i=0; i<arr.length; i++) {
if(arr[i] == num) {
return true
}
}
return false;
}
console.log(linearSearch(arr1, 3)) // true
console.log(linearSearch(arr1, 4)) // false
console.log(linearSearch(arr2, 6)) // true
console.log(linearSearch(arr2, 7)) // false
이진 검색
1. 배열의 중간 값을 확인해 큰지 작은지 구분한다
2. 큰 경우 : 중간 값보다 큰 쪽을 검색
3. 작은 경우 : 중간 값보다 작은 쪽을 검색
var arr1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
function binarySearch(arr, num) {
var lowIndex = 0;
var highIndex = arr.length;
while(lowIndex <= highIndex) {
var midIndex = Math.floor((highIndex+lowIndex)/2);
console.log(`midIndex : ${midIndex}, lowIndex : ${lowIndex}, highIndex : ${highIndex}`)
if(arr[midIndex] == num) {
return midIndex;
} else if(num>arr[midIndex]) {
lowIndex = midIndex+1;
} else {
highIndex = midIndex-1;
}
}
return -1
}
console.log(binarySearch(arr1, 5))
// midIndex : 8, lowIndex : 0, highIndex : 16
// midIndex : 3, lowIndex : 0, highIndex : 7
// midIndex : 5, lowIndex : 4, highIndex : 7
// midIndex : 4, lowIndex : 4, highIndex : 4
// 4
console.log(binarySearch(arr1, 17))
// midIndex : 8, lowIndex : 0, highIndex : 16
// midIndex : 12, lowIndex : 9, highIndex : 16
// midIndex : 14, lowIndex : 13, highIndex : 16
// midIndex : 15, lowIndex : 15, highIndex : 16
// midIndex : 16, lowIndex : 16, highIndex : 16
// -1
'자료구조' 카테고리의 다른 글
빠른 정렬(Quick Sort) (0) | 2020.07.03 |
---|---|
삽입 정렬(Insertion Sort) (0) | 2020.07.02 |
선택 정렬(Selection Sort) (0) | 2020.07.01 |
거품 정렬(Bubble Sort) (0) | 2020.07.01 |
집합(Set) (0) | 2020.06.30 |