qq_40164667 2022-03-12 22:07 采纳率: 50%
浏览 36
已结题

我是一名职高生 在学c语言这个是2分查找法 看懂了一些 但大部分还是不懂 希望大家帮我解析一下这个程序

#include".h"
#define N 10
main
{
int i,j,number,top,bott,mid,loca,a[N],flag;
char c;
printf("输入15个数\n");
for(i=0;i++;i<15)
scanf("%d",&a[i]);
loca=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((loca>=0)&&(top<=bott))
{
mid=(bott+top)/2;
if(number==a[mid]
{
loca=mid;
printf("%d位于表中第%个数\n",number,loca+1);
}
else if(nuber<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(loca==0||loca==-1)
printf("%d不在表中。\n",number);
}

#include".h"
#define N 10
main
{
int i,j,number,top,bott,mid,loca,a[N],flag;
char c;
printf("输入15个数\n");
for(i=0;i++;i<15)
scanf("%d",&a[i]);
loca=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((loca>=0)&&(top<=bott))
{
mid=(bott+top)/2;
if(number==a[mid]
{
loca=mid;
printf("%d位于表中第%个数\n",number,loca+1);
}
else if(nuber<a[mid])
bott=mid-1;
else
top=mid+1;
}
if(loca==0||loca==-1)
printf("%d不在表中。\n",number);
}

  • 写回答

3条回答 默认 最新

  • 关注

    你这代码错误太多了啊。
    for(i=0;i++;i<15)这里,应该是for(i=0;i<15;i++)
    if((number<a[0])||(number>a[N-1]))这里,number没有初始化就用了。
    二分法查找的前提是数组已经从小到大排好(或者从大到小排好了,这里说明的时候,默认数组已经按照从小到大排好了),然后比较number与数组中间值的大小,如果number比a[mid]大,那么再跟mid到N中间的数进行比较,直到找到number或者查找结束。
    代码如下:

    #include <stdio.h>
    
    //数组以升序排列时,二分法查找x
    int binSearch(int x, int a[], int n)
    {
        int low, high, mid;
        low = 0;
        high = n-1;
        while(low <= high)
        {
            mid = (low + high) / 2;
            if(x < a[mid])
                high = mid - 1;
            else if(x > a[mid])
                low = mid + 1;
            else
                return mid;
        }
        return -1;
    }
    int main()
    {
        int i,number,pos;
        int a[15];
        printf("请输入要查找的数:");
        scanf("%d",&number);
        printf("请输入15个整数(升序):");
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
        pos = binSearch(number,a,15);
        if(pos < 0)
            printf("未找到%d",number);
        else
            printf("%d位于表中第%d个数",number,pos+1);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月12日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度