黑马程序员技术交流社区

标题: 求助啊,有关于折半查找的问题 [打印本页]

作者: 嗨灬小凯    时间: 2015-4-29 17:25
标题: 求助啊,有关于折半查找的问题
# include <stdio.h>
# define N 15
int main ()
{
    int i,number,top,bott,mid,loca,a[N],flag =1,sign;
    char c;
    printf("enter data :\n");
    scanf("%d",&a[0]);
    i =1;
    while(i<N)
    {
        scanf("%d",&a[i]);
        if (a[i]>=a[i-1])
            i++;
        else
            printf("enter this data again:\n");

    }
    printf("\n");
    for (i =0;i<N;i++)
        printf("%5d",a[i]);
    printf("\n");
    while (flag)
    {
        printf("input number to look for:");
        scanf("%d",&number);
        sign =0;
        top = 0;
        bott = N-1;
        if ((number<a[0] )|| (number>a[N-1]))
           loca=-1;
        while (!sign && top<=bott)
        {
            mid =(bott+top)/2;
            if (number==a[mid])
            {
                loca= mid;
                printf("has found %d,its position is %d\n",number,loca+1);
                sign =1;
            }
            else if(number<a[mid])
                bott =mid-1;
            else
                top = mid+1;

        }
        if( !sign || loca==-1)
            printf("cannot find %d\n",number);
        printf("continue or not(Y/N)");
        scanf("%c",&c);
        if(c=='N'||c=='n')
            flag = 0;

    }
    return 0;
}
/*输出为:
enter data :
1
3
4
5
6
8
12
23
34
44
45
56
57
58
68

    1    3    4    5    6    8   12   23   34   44   45   56   57   58   68
input number to look for:7
cannot find 7
continue or not(Y/N)input number to look for:n
cannot find 7
continue or not(Y/N)请按任意键继续. . .



其中while (!sign && top<=bott)中!sign为什么为0,这程序中的sign值变化不理解,求指点·····




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2