注册 登录
编程论坛 C语言论坛

大家试试我这个代码 功能是查找输入数字,但是只能找8-10的数字 0-7都会卡住

Remained 发布于 2022-02-21 19:45, 1005 次点击
程序代码:
//二分查找Bnary_Search:在一个数组中查找具体某个数,如果找到就返回该数,找不到就返回-1
#include<stdio.h>
int Search_Num(int arr[],int Find_Num,int Size);
//在一个数组中查找具体某个数,
//如果找到就返回该数,找不到就返回-1  

int main()
{
    int arr[]={0,1,2,3,4,5,6,7,8,9,10};    //0-10 查找的数字库
    int Find_Num = 0;//你要找的数字
    int ret = 0;            //返回值
    int Size = sizeof(arr)/sizeof(arr[0]);// 该数组大小/数组中一个数字的大小=该数组中数字的个数         

    printf("从0-10中输入一个要寻找的数字:\n");
    scanf("%d",&Find_Num);
   
    ret = Search_Num(arr,Find_Num,Size);//二分法查找函数
//此处arr为首元素的地址
    if(ret == -1)
    {
        printf("找不到指定数字\n");
    }
    else
    {
        printf("找到了,下标是:%d\n",ret);
    }
    return 0;
   
}
//arr本质上是一个指针
int Search_Num(int arr[],int Find_Num,int Size)//输入一个数组,一个需要查找的数字 一个数组中数字个数
{
   
    int left = 0;//定义左下标
    int right = Size-1;//定义右下标
      
    while(left<=right)//只要左下标还小于等于右下标就表示还有数字可以寻找
    {
        int mid =(left+right)/2;    //中间元素下标
        if(arr[mid]<Find_Num)        //该数组中中间一个数比要找的数小
        {
            left=mid+1;                //左边元素下标变为中间元素下标+1
        }
        else if(arr[mid]>Find_Num)  //如果该数组中间元素下标比要找的数大
        {
            left=mid-1;                //左边元素下标变为中间元素下标-1
        }
        else
        {
            return mid;                //反馈该数  
        }
   
    }
    return -1;     //找不到反馈-1
   
}
3 回复
#2
Remained2022-02-21 19:45
求大神看看!
#3
rjsp2022-02-22 08:16
0-7都会卡住
说谎了吧,输入5明明也可以的。

把 left=mid-1; 改为 right=mid-1; 就行了
#4
Remained2022-02-22 15:56
回复 3楼 rjsp
膜拜!
1