有序数组二分法查找数值

 

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

 


 

转载于:https://www.cnblogs.com/wubenzhimu/archive/2012/10/30/2747215.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值