C언어 이진탐색에서 데이터검색 질문입니다.

조회수 774회


#include<stdio.h>
#include<stdlib.h>

int idxsearch(int ar[], int first, int last, int target) {
    int mid = (first + last) / 2;
    if (first > last)
        return -1;
    else {
        if (ar[mid] == target)
            return mid;
        else {
            if (ar[mid] > target) {
                last = mid - 1;
                idxsearch(ar, first, last, target);
            }
            else {
                first = mid + 1;
                idxsearch(ar, first, last, target);
            }
        }
    }
}
int main() {
    scanf_s(" %d", &num);
    int *inorder = malloc(sizeof(int)*num);
    int *levelorder = malloc(sizeof(int)*num);

    for (int i = 0; i < num; i++)
        scanf_s(" %d", &inorder[i],sizeof(int));
    for (int j = 0; j < num; j++)
        scanf_s(" %d", &levelorder[j],sizeof(int));
    printf("\n");

    printf(" %d\n", idxsearch(inorder, 0, num-1, 3));
    printf(" %d\n", idxsearch(levelorder, 0, num-1, 1));

    //printsol();
    free(levelorder);
    free(inorder);
}

첫번째 열에는 몇개의 데이터를 입력할 것인지가 나오고 두번째 열에는 입력한 갯수만큼 데이터를 넣습니다.

의도 입력한 데이터를 토대로 해당 인덱스가 어디인지 출력하는 프로그램

입력데이터 3 3 2 1 3 2 1

이렇게 하면 출력이 0 2 가 되어야 정상이지만

아무것도 찾을 수 없다는 -1 -1 를 출력하게 되는데 도통 모르겠습니다..

환경은 windows 10 이며, visual studio 2017로 작성하였습니다.

답변주시면 정말 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다. - 위키백과

    입력 값을 오름차순 정수들로 넣어보세요~

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)