C 언어는 2분 찾기 그룹의 키 값(귀속 및 비귀속)을 실현합니다.

7020 단어 二分查找
기본 문제: 2분 찾기 방식을 사용하여 그룹 내의 값을 일치시킵니다. 성공하면 아래 표식을 되돌려줍니다. 그렇지 않으면 -1을 되돌려줍니다.귀속과 비귀속 두 가지 방법으로 설명하십시오.
비귀속 코드는 다음과 같습니다.
#include <stdio.h>

int binsearch(int arr[], int len, int src)

{

    int idx = 0,l = 0, r = len-1;

    idx = (l + r)/2;

    while(src != arr[idx])

    {

        if(src < arr[idx])    

        {

            r = idx - 1;

        }

        else

        {

            l = idx + 1;

        }

        if(l > r)

        {

            idx = -1;

            break;

        }

        idx = (l + r)/2;

    }

    return idx;

} 

int main()

{

    int arrar[12] = {1,3,4,6,7,8,9,20,100,101,200};

    int len = 11;

    int src; 

    int result;

    scanf("%d", &src);

    result = binsearch(arrar, len, src);

    printf("Result : %d
", result); return 0; }

 
귀속 코드는 다음과 같습니다.
#include <stdio.h>



int binsearch(int arr[], int l, int r, int src)

{

    int result = 0;

    int mid = (l + r)/2;

    if (l < r){

        if(src == arr[mid])

        {result = mid;}

        else if(src > arr[mid])    

        {result = binsearch(arr, mid + 1, r , src);}

        else    

        {result = binsearch(arr,l ,mid - 1, src);}



        

    }

    else if (l == r)

    {

        result = (src == arr[l] ? l : -1);

    }

    else

    {

        result = -1;

    }

    return result;

}





int main()

{

    int arra[10] = {1,6,9,19,20,30,100,400,1000,1001};

    int len = 10;

    int result, src;

    printf("input a num: ");

    scanf("%d" ,&src);    

    result = binsearch(arra, 0, len, src);

    printf("Result: %d
",result); return 0; }

 
알고리즘에 대해 이제 막 입문했기 때문에 벽돌을 찍는 것을 환영합니다.

좋은 웹페이지 즐겨찾기