首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

看了整整一前半天就是不知道到底是哪里出了错

2013-09-04 
看了整整一上午就是不知道到底是哪里出了错。#includestdio.hint binreseach(int v[],int n,int number){

看了整整一上午就是不知道到底是哪里出了错。
#include<stdio.h>
int binreseach(int v[],int n,int number)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(high+low)/2;
if(number>v[mid])
low=mid;
else if(number<v[mid])
high=mid;
else
return 1;
}
return 0;
}
main()
{
int v[20],number,m,n,i;
printf("input:the array have n numbers\n");
scanf("%d",&n);
printf("input the array number:\n");
for(i=0;i<n;i++)
scanf("%d",&v[i]);
printf("input the find number:\n");
scanf("%d",&number);
m=binreseach(v,n,number);
if(m>0)
printf("find the number:\n");
else 
printf("can't find the number:\n");
}
这是个折半查找的程序,当输入的数据是在v数组中的时候,程序正常运行,但是当输入的number不是在v数组的时候,按回车键,程序始终没有反应。


折半法查询程序
[解决办法]

int binreseach(int v[],int n,int number)
{
    int low=0,high=n-1,mid;
    while(low<=high)
    {
        mid=(high+low)/2;
        if(number>v[mid])
            low=mid + 1;
        else if(number<v[mid])
            high=mid - 1;
        else
            return 1;
    }
    return 0;
}

[解决办法]
结束点明显不对
你的代码要number==v[mid]时返回1,low<=high时返回0
而low>high是不可能出现的情况,两个数取平均怎么样都不会大于较大数的
你的死循环是出现在mid==low,high==low+1的时候,这时每次循环mid都是low,并且进入(number>v[mid])分支
[解决办法]
step by step debug.

热点排行