有序数组二分法查找数值

 

#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 下测试通过

 


 

posted @ 2012-10-30 23:22  无本之木a  阅读(1608)  评论(4编辑  收藏  举报