묻공러
[C 자/알] 탐색 알고리즘 (선형 탐색, 이진 탐색)
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (487)
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 (124)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
      • 유니티 (1)
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
자료구조 & 알고리즘/[코드조선] C 자료구조 & 알고리즘

[C 자/알] 탐색 알고리즘 (선형 탐색, 이진 탐색)

2024. 2. 20. 18:50

탐색 알고리즘(Search Algorithm)
자료구조 안에 저장되어 있는 특정 자료를 찾아오는 알고리즘이다
대표적인 탐색 알고리즘으로는
선형 탐색, 이진 탐색, 해시 기반 탐색이 있다


선형 탐색(Linear Search)
자료구조의 모든 자료를 순서대로 훑어가며 특정 자료를 찾는 알고리즘이다

예를 들어 반복문을 돌면서 순회하면서 찾는 경우를 의미한다

 

이진 탐색(Binary Search)
정렬되어 있는 자료구조에 절반씩 자료를 제거해 가며 원하는 자료를 찾는 알고리즘이다
단계가 진행 될 때마다 탐색 범위가 절반씩 줄어들어서 이진 탐색이라고 부른다

 

 

선형탐색 vs. 정렬 후 이진탐색
선형탐색과 이진탐색의 공간 복잡도는 같지만,

시간 복잡도는 이진탐색이 O(N) 보다 빠를 수 있다

따라서,

탐색 빈도가 높다면, 정렬 후 이진탐색

탐색 빈도가 낮고 배열의 삽입이나 삭제가 적다면, 정렬 후 이진탐색

탐색 빈도가 낮고 배열의 삽입이나 삭제가 많다면, 선형 탐색

 

선형탐색 vs. 해시탐색

  선형탐색 해시탐색
용이성 모든 자료구조 가능 모든 자료구조 가능
시간 복잡도 O(N) O(1)
공간 복잡도 O(N) O(N) 보다 큰 공간 복잡도

 

 

이진탐색 구현 코드

더보기
#include <stdio.h>

enum
{
    LENGTH = 1024,
    INVALID = -1,
};

int BinarySearch(int InData[], int InLength, int InKey);

int main(void)
{
    int Data[LENGTH + 1];
    int i = 0;

    for (i = 0; i < LENGTH; ++i)
    {
        Data[i] = i * 2;
    }

    int FoundIndex = BinarySearch(Data, LENGTH, 512);
    if (FoundIndex != INVALID)
    {
        printf("Data[%d] = %d\n", FoundIndex, Data[FoundIndex]);
    }

    FoundIndex = BinarySearch(Data, LENGTH, 511);
    if (FoundIndex != INVALID)
    {
        printf("Data[%d] = %d\n", FoundIndex, Data[FoundIndex]);
    }

    return 0;
}

int BinarySearch(int InData[], int InLength, int InKey)
{
    int Left, Mid, Right;
    Left = 0;
    Right = InLength - 1;

    while (Left <= Right)
    {
        Mid = (Left + Right) / 2;

        if (InKey < InData[Mid])
        {
            Right = Mid - 1;
        }
        else if (InKey == InData[Mid])
        {
            return Mid;
        }
        else if (InData[Mid] < InKey)
        {
            Left = Mid + 1;
        }
    }

    return INVALID;
}
저작자표시 비영리 변경금지 (새창열림)

'자료구조 & 알고리즘 > [코드조선] C 자료구조 & 알고리즘' 카테고리의 다른 글

[C 자/알] 이진 트리와 이진 힙  (0) 2024.02.21
[C 자/알] 스택과 큐  (0) 2024.02.21
[C 자/알] 배열, 가변 배열, 링크드리스트  (0) 2024.02.20
[C 자/알] 정렬 알고리즘 (버블소트와 퀵소트)  (0) 2024.02.20
[C 자/알] 자료구조와 알고리즘의 개념  (0) 2024.02.19
'자료구조 & 알고리즘/[코드조선] C 자료구조 & 알고리즘' 카테고리의 다른 글
  • [C 자/알] 스택과 큐
  • [C 자/알] 배열, 가변 배열, 링크드리스트
  • [C 자/알] 정렬 알고리즘 (버블소트와 퀵소트)
  • [C 자/알] 자료구조와 알고리즘의 개념
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.