더북(TheBook)

검색 알고리즘 사용하기

많은 검색 알고리즘 중에서 학습용으로 가장 권장하는 이진 검색 알고리즘을 사용하여 배열에서 특정 데이터를 검색하는 기능을 코드로 구현해 보겠습니다. 검색 알고리즘을 적용하면 주어진 데이터에서 특정 데이터를 찾을 수 있습니다.

정렬된 데이터를 이진 검색(이분 탐색)을 사용하여 검색: SearchAlgorithm.cs

using System;

class SearchAlgorithm
{
    static void Main()
    {
        //① 입력
        int[] data = { 1, 3, 5, 7, 9 }; //오름차순으로 정렬되었다고 가정
        int N = data.Length;
        int search = 3;     //검색할 데이터: Console.ReadLine() 등으로 가져오기
        bool flag = false;  //플래그 변수: 찾으면 true, 찾지 못하면 false
        int index = -1;     //인덱스 변수: 찾은 위치

        //② 처리: 이진 검색: Full Scan -> Index Scan
        int low = 0;          //min: 낮은 인덱스
        int high = N - 1;     //max: 높은 인덱스
        while (low <= high)
        {
            int mid = (low + high) / 2;              //중간 인덱스 구하기
            if (data[mid] == search)
            {
                flag = true; index = mid; break; //찾으면 플래그, 인덱스 저장 후 종료
            }
            if (data[mid] > search)
            {
                high = mid - 1;                   //찾을 데이터가 작으면 왼쪽 영역으로 이동
            }
            else
            {
                low = mid + 1;                   //찾을 데이터가 크면 오른쪽 영역으로 이동
            }
        }

        //③ 출력
        if (flag)
        {
            Console.WriteLine($"{search}을(를) {index}위치에서 찾았습니다.");
        }
        else
        {
            Console.WriteLine("찾지 못했습니다.");
        }
    }
}

실행 결과

3을(를) 1위치에서 찾았습니다.

이진 검색 알고리즘은 정렬된 데이터를 검색하는데, 찾으려는 값보다 작거나 클 때 반씩 나누어서 검색합니다. 따라서 순차 검색보다 검색 효율이 상당히 좋습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.