2 점 찾기 (20 점)

이 문 제 는 이분 검색 알고리즘 을 실현 해 야 한다.
함수 인터페이스 정의:
Position BinarySearch( List Tbl, ElementType K );

그 중에서 List 구조 정 의 는 다음 과 같다.
typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /*                 */
};
Tbl 은 사용자 가 들 어 오 는 선형 표 로 그 중에서 ElementType 요 소 는 >, =, < 를 통 해 비교 할 수 있 고 제목 은 들 어 오 는 데 이 터 를 점차적으로 질서 있 게 할 수 있다.함수 BinarySearch 에서 K 의 위 치 를 찾 아야 합 니 다. 즉, 배열 아래 표 시 됩 니 다 (주의: 요 소 는 아래 표 시 된 1 부터 저장 합 니 다).찾 으 면 다음 표 시 를 되 돌려 줍 니 다. 그렇지 않 으 면 특수 한 실패 표시 Tbl 를 되 돌려 줍 니 다.
심판 테스트 프로그램 샘플:
#include 
#include 

#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
    ElementType Data[MAXSIZE];
    Position Last; /*                 */
};

List ReadInput(); /*     ,    。     1     */
Position BinarySearch( List Tbl, ElementType K );

int main()
{
    List Tbl;
    ElementType K;
    Position P;

    Tbl = ReadInput();
    scanf("%d", &K);
    P = BinarySearch( Tbl, K );
    printf("%d
", P); return 0; } /* */

입력 샘플 1:
5
12 31 55 89 101
31

출력 예시 1:
2

입력 샘플 2:
3
26 78 233
31

출력 예시 2:
0
Position BinarySearch(List Tbl, ElementType K)
{
    int left = 1, right = Tbl->Last;
    while(left <= right)
    {
        int mid = (left + right) / 2;
        if(Tbl->Data[mid] < K)
        {
            left = mid + 1;
        }
        else if(Tbl->Data[mid] > K)
        {
            right = mid - 1;
        }
        else
        {
            return mid;
        }
    }
    return NotFound;
}

좋은 웹페이지 즐겨찾기