검색(Search)

2020. 6. 30. 16:16·자료구조
검색 : 특정 값을 찾는 일

선형 검색 : 정렬된 값 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
'자료구조' 카테고리의 다른 글
  • 삽입 정렬(Insertion Sort)
  • 선택 정렬(Selection Sort)
  • 거품 정렬(Bubble Sort)
  • 집합(Set)
꾸준2
꾸준2
  • 꾸준2
    꾸준2
    꾸준2
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • 복습 프로젝트 (3)
      • 어드민 프로젝트 (4)
      • 프로젝트 리팩토링 (4)
      • Database (0)
      • Java Library (2)
      • Java (4)
      • Java(JVM) (1)
      • 자바 문제 (13)
        • 이론 (6)
        • 실습 (7)
      • IDE (2)
        • IntelliJ (2)
      • 인강 (13)
        • SpringBoot(JPA활용1) (0)
        • 자바(기본편) (6)
        • 자바(중급1편) (3)
        • 자바(중급2편) (1)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (3)
      • Network (2)
      • Node (3)
      • CS (0)
      • amCharts4 (5)
      • 오류 모음 (4)
        • 리눅스 (1)
      • 기타지식 (2)
      • 자주 사용하는 기능 (4)
      • Vue (11)
      • Javascript (13)
      • Javascript-메서드 (3)
      • CSS (6)
      • 라이브러리 (4)
      • 자료구조 (11)
      • 알고리즘 (4)
      • Vue-프로젝트 (20)
      • Vue-bitcoin프로젝트 (6)
      • 블로그클론 프로젝트 (11)
      • 면접 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
꾸준2
검색(Search)
상단으로

티스토리툴바