一个二分法问题,请教一下哪里有错?
#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;
[解决办法]
非递增有序