C언어 - 탐색

SEUNGJUN JEONG·2022년 6월 1일
0

C/C++

목록 보기
10/15

선형 탐색

  • 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교
#include <stdio.h>

#define SIZE 5

int main() {
    int key;
    int list[SIZE] = {1, 2, 3, 4, 5};

    printf("탐색할 값을 입력하시오: ");
    scanf("%d", &key);

    for (int i = 0; i < SIZE; i++) {
        if (list[i] == key)
            printf("탐색 성공, 인덱스 : %d", i);
    }
    
    return 0;
}

이진 탐색

  • 선형 탐색에 비해 속도가 매우 빠르나 배열이 정렬이 되어 있어야 함
  • 배열의 중앙에 있는 값을 탐색키와 비교
  • 주로 고정된 데이터에 대한 탐색에 적합
#include <stdio.h>

#define SIZE 10

int binarySearch(int list[], int size, int key);

int main() {
    int list[SIZE] = {1, 2, 3, 5, 6, 7, 11, 20, 30, 50};
    int key;

    printf("탐색할 값을 입력하시오: ");
    scanf("%d", &key);
    printf("탐색 성공, 인덱스: %d\n", binarySearch(list, SIZE, key));
}

int binarySearch(int list[], int size, int key) {
    int low, high, middle;
    low = 0;
    high = size - 1; // 첫번째 탐색 -> 배열의 양 끝 맞추기

    while (low <= high) {
        printf("탐색 범위: %d ~ %d\n", low, high);
        middle = (low + high) / 2; // 중간 위치 지정

        if(key == list[middle]) // 일치하면 탐색 성공
            return middle;
        else if(key > list[middle])
            low = middle + 1; // 중간 요소 값 초과하는 값으로 하한 재설정
        else
            high = middle - 1; // 중간 요소 값 미만 값으로 상한 재설정
    }
}
탐색할 값을 입력하시오: 30
탐색 범위: 0 ~ 9
탐색 범위: 5 ~ 9
탐색 범위: 8 ~ 9
탐색 성공, 인덱스: 8
profile
Microsoft Learn Student Ambassadors

0개의 댓글