OliV_Ia 2022-01-24 18:13 采纳率: 81.8%
浏览 49
已结题

才学习了二分法,不知道哪里出问题了

打印Input the number to search:以后没等输入就自动结束运行了

#include <stdio.h>
#include <stdlib.h>
#define SIZE 20
int Init(int * nums, int * size);
void Ask(int * target);
int search(int * nums, int size, int target);


int main()
{
    int * nums_1, size_1, target_1=0;
    printf("%d\n",Init(nums_1,&size_1));
    Ask(&target_1);
    search(nums_1, size_1, target_1);
    

}

int Init(int * nums, int * size){
   int i = 0, status = 0,num; 
   nums = (int*)malloc(sizeof(int) * SIZE);
   if(nums == NULL)
        status = 1;
    printf("Input numbers in the array(<=20),you must input smaller numbers first:(press q to quit)");
    while(scanf("%d",&num) != EOF){
        nums[i] = num;
        i++;
        if(i==20)
            break;
    }
    *size = i;
    return status;

}

void Ask(int * target){
    int num;
    printf("Input the number to search:");
    scanf("%d", &num);
    *target = num;

}
int search(int * nums, int size, int target){
    int left = 0, right = size-1, middle;
    middle = left + (right - left) / 2; //防止溢出
    while(right >= left){
        if(target == nums[middle]){
             printf("%d", middle);
            return 0;
        }
        else if(target < nums[middle])
            right = middle - 1;
        else if(target > nums[middle])
            left = middle + 1;
    }

    printf("%d",right+1);
    return 0;


}


  • 写回答

2条回答 默认 最新

  • fuill 2022-01-24 18:41
    关注

    你这代码难看懂啊,二分查找

    #include<stdio.h>
    #include<stdlib.h>
    
    int serch2(int t[],int key,int b,int n)
    {
        int mid,e=n-1;
        while(b<=e)
        {
            mid=(b+e)/2;
            if(t[mid]==key)
            {
                return mid;
            }
            else if(t[mid]<key)
            {
                b=mid;
            }
            else
            {
                e=mid+1;
            }
        }
        return -1;
    }
    void p(int t[],int b,int n)
    {
        for(int j=b; j<n; j++)
            printf("%d ",t[j]);
        printf("\n");
    }
    int main()
    {
        int n,j,key;
        printf("输入数组大小:");
        scanf("%d",&n);
        int t[n];
        printf("输入数组:");
        for(j=0; j<n; j++)
            scanf("%d",&t[j]);
        printf("输入查找的数:");
        scanf("%d",&key);
        printf("search %d\n",key);
        int p2=serch2(t,key,0,n);
    
        if(p2==-1) printf("not found!\n");
        else printf("compleat,p2=%d,key=%d\n",p2,t[p2]);
    
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 1月24日

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料