ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 순차 탐색 , 이진 탐색
    컴퓨터 공부/자료구조 2020. 3. 20. 18:27

    앞에서 차례대로 탐색

    // 순차 탐색 알고리즘
    int  Lsearch(int ar[], int len, int target) 
    {
        int  i;
        for( i = 0 ;   i <len ; i++ )      {
                if(ar[i] == target)
                     return i;       // 찾은 대상의 인덱스 값 반환      
        }
        return -1;       // 찾지 못했음을 의미하는 값 반환 
    }
    

    찾는 데이터가 처음에 있다:  최상의 경우 --> 연산의 = 1

    찾는 데이터가 없거나 가장 끝에 있다: 최악의 경우 ---> 연산의 수 = n

    가장 현실적인 경우는? 평균의 경우!

     

                                                    ↑


     

    이진 탐색 

    이미 정렬된 배열에서 검색

    이진 탐색

    1. 정 가운데 위치 찾기

    2. 원하는 데이터인지 비교

    -> y : 반환

    -> N: 앞 또는 뒤 부분을 검색 대상으로 좁힌다. (검색 대상이 반으로 줄어든다!!)

     

     int BSearch(int ar[], int len, int target)  {
            int first = 0;        // 탐색 대상의 시작 인덱스 값
            int last = len-1;        // 탐색 대상의 마지막 인덱스 값
            int mid;
    
            while(first <= last) {
                   mid = (first+last) / 2;        // 탐색 대상의 중앙을 찾는다.
                   if( target == ar[mid] )        // 중앙에 저장된 것이 타겟이라면
                   {                     
                   return mid; // 탐색 완료!       
                   }
                   else      // 타겟이 아니라면 탐색 대상을 반으로 줄인다.
                   {
                          if(target < ar[mid])
                               last = mid-1;
                          else
                               first = mid+1;
                   }
            }
            return -1;        // 찾지 못했을 때
    }
    

    이진 탐색 알고리즘의 재귀 구현

    int	BSearchRecur(int  ar[], int first, int last, int target)
    {
        int mid; //가운데 위치
    
        if (first > last)
            return -1; //데이터 한 개 이상일 때
        mid = (first + last) / 2;
    
        if (ar[mid] == target) //타겟이 가운데 위치
            return mid; //바로 반환
        else if (target < ar[mid]) //가운데 데이터 보다 작으면 
            return BSearchRecur(ar, first, mid - 1, target); //앞부분 이진 탐색
        else //더 크면
            return BSearchRecur(ar, mid + 1, last, target); //뒷부분 이진 탐색
    } 
    

     

    '컴퓨터 공부 > 자료구조' 카테고리의 다른 글

    재귀함수 (팩토리얼, 피보타치 수열, 하노이 타워)  (0) 2020.03.20
    선택 정렬  (0) 2020.03.20
    자료구조  (0) 2020.03.20
    C언어) 링크드리스트 (연결 리스트)  (0) 2020.03.20
    C언어) 동적 할당  (0) 2020.03.20
Designed by Tistory.