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

一个二分法有关问题,请问一下哪里有错

2012-03-12 
一个二分法问题,请教一下哪里有错?#includestdio.hintmain(void){inta[15]{14,13,12,11,10,9,8,7,6,5,4

一个二分法问题,请教一下哪里有错?
#include   <stdio.h>


int   main(void)
{
        int   a[15]   =   {14,13,12,11,10,9,8,7,6,5,4,3,2,1,0};   //变量定义;
        int     high,   low,   n,   mid;
        low   =   0;   high   =   14;

        scanf( "%d ",&n);     //输入要查找的数;

//   进行二分法,高于中间数的   low   =   mid   +   1   否则   high   =   mid   -1    
        do
        {
                mid   =   (high+low)/2;
                if(n   ==   a[mid])
                break;

                else   if(n   >   a[mid])
                low   =   mid   +   1;

                else
                high   =   mid   -   1;

                printf( "   %d   %d   %d\n ",high,low,mid);         //运行此循环时若   n   =   7   则正  
                                                                                              //正常,大于7就始终执行   low  
                                                                                              //=   mid   +   1   ;小于7就始终执行
                                                                                              //high   =   mid   -   1;


        }   while(high   > =   low);

        if(high   <   low)
        printf( "no   %d   %d   find   number   at   array\n ",high,low);
        else
        printf( "find   number   is   %d   at   a[%d]\n ",a[(high+low)/2],(high+low)/2);

        getchar();

      return   0;
}

[解决办法]
if(n == a[mid])
break;

else if(n < a[mid])//应该是这样吧??????????????
low = mid + 1;

else
high = mid - 1;

[解决办法]
非递增有序

热点排行
Bad Request.