您的位置:首页 > 其它

有序数组二分法查找数值

2012-10-30 23:22 369 查看
#include <stdio.h>
#define M 11

/**
*    有序数组二分法查找数值
*    low        最小值
*    mid        中间值
*    high    最大值
*    val        输入值
*    fount    判断值  1 找到 0 未找到
*/

void main()
{
int low, mid, high, val, fount;
static int arr[M] = {-12,-4,-1,0,11,22,44,67,89,90,111};

printf ("请输入一个数字:");

low = 0;
high = M - 1;

/* 对输入的内容合法性进行判断 */

while ( scanf("%d", &val) != 1 ) {
printf("请入的是非法字符!!\n请重新输入\n");
getchar();
}

while ( low <= high )
{

mid = ( low + high ) / 2;

if ( val == arr[mid] ) {
fount = 1;
break;
}

if ( val < arr[mid] ) {
--high;
} else {
++low;
}

}

if ( fount == 1 ) {
printf ("该数值存在,值%d是%d个\n", val, mid);
} else {
printf ("%d的值不存在\n", val);
}

}


修改了一下程序,加了对非法字符的检测,vc6.0 下测试通过



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: