编辑代码

#include<stdio.h>

int search(int arr[],int k,int sz)
{
    int left=0;//数组的左下标
    int light=sz-1;//数组的右下标,因为sz代表数组元素的个数,因为数组下标从0开始,使用最右下标应该-1;
    while(left<=light)
    {
        int mid=(left+light)/2;//每次求中间的下标
        if(arr[mid]<k)
        {
            left=mid+1;//中间下标+1,为下次循环left的值
        }
        else if(arr[mid]>k)
        {
            light=mid-1;//上面判断所查找的值小,所以新的范围应该在左边,左边下标不变,右边下标为中间下标-1;
        }
        else
        {
            return mid;//查找的值与数组值相等,返回数组下标,
        }
    }
    return -1;//当查找左下标超过右下标,代表查询整数不在数组范围内,返回-1;
}

int main()//主函数
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int k=0;
    printf("想查找的整数:7");
    int sz=sizeof(arr)/sizeof(arr[0]);//求出数组里元素的个数。
    int ret=search(arr,7,sz);
    if(-1==ret)
    {
        printf("无\n");
    }
    else
    {
        printf("下标为:%d\n",ret);//返回的数组下标。
    }
    return 0;
}