C语音在数组中找数字

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>

int main()
{  
    int arr[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
    int k = 0;
    int dgs = sizeof(arr) / sizeof(arr[0]);   
    //元素个数=总元素数量/单个元素
    int left = 0;    //左下标
    int right = dgs - 1;
    printf("输入一个数:\n");
    scanf("%d", &k);
    while (right >= left)
    {
        int mid = (left + right) / 2;
        if (arr[mid] > k)
            //假如k=4 arr[mid]得到6>4[6的底数为5],说明4在中间值mid的左边.并且六不等于四
            //所以排除六这个中间值,也就是得到right=mid-1;减去mid这个中间值
        {
            right = mid - 1;
            //左边元素=中间值-1.即[这个mid前面没有arr,所以他是个底数]
            //5-1=4,所以得到此数在底数0-4之间,然后进行下一次循环
        }
        else if (arr[mid] < k)
            //假如k=7 arr[mid]得到6<7[6的底数为5],说明7在中间值mid的右边.并且六不等于七
            //所以排除六这个中间值,也就是得到right=mid+1;这边也是减去mid这个中间值
        {
            left = mid + 1;

        }
        else
        {
            printf("你找到了,底数是%d\n", mid);
            break;
        }
    }
    if (left > right)
    {
        printf("没有找到对应的数\n");
    }
    return 0;
}

猜你喜欢

转载自blog.51cto.com/14893161/2517524