有序数组二分法查找数值

 

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

 

有序数组二分法查找数值

有序数组二分法查找数值


 

你可能感兴趣的:(二分法)