using System;

public class 이진검색
{
    public static void Main(string[] args)
    {
        //[1] Input
        int[] data = { 1, 3, 5, 7, 9 }; //[!] 오름차순 정렬되었다고 가정하고...
        Console.WriteLine("찾을 데이터 : ");
        int search = Convert.ToInt32(Console.ReadLine());
        bool flag = false; // 찾았으면 true 그렇지 않으면 false
        int index = -1; // 찾은 위치
        int low = 0; int mid = 0; int high = 0; // 이분탐색 관련 변수
        low = 0; high = data.Length - 1;
        //[2] Process
        #region 순차검색
        for (int i = 0; i < data.Length; i++)
        {
            if (data[i] == search)
            {
                flag = true;
                index = i;
            }
        }
        #endregion

        while (low <= high)
        {
            mid = (low + high) / 2; // 중간값(검색할 데이터)
            if (data[mid] == search)
            {
                flag = true; index = mid; break;
            }
            if (data[mid] < search)
            {
                low = mid + 1;
            }
            else
            {
                high = mid - 1;
            }
        }

        //[3] Output
        if (flag)
        {
            Console.WriteLine("{0}를 {1}위치에서 찾았습니다.", search, index);
        }
        else
        {
            Console.WriteLine("찾지 못했습니다.");
        }
    }
}

'.NET프로그래밍 > C# 3.5 SP1' 카테고리의 다른 글

53. 대리자(Delegate)  (0) 2009.08.13
알고리즘 - 11. 병합정렬(Merge)  (0) 2009.08.13
52. 정수형인덱서와 문자열인덱서  (0) 2009.08.13
51. 인덱서(Indexer)  (0) 2009.08.13
50. 속성(Property)  (0) 2009.08.13
Posted by holland14
: