二分算法查找数据所在区间索引值的例子

前段时间写了一个二分算法应用的例子,用于查找数据在表格(数组)中某个区间的索引值,已在CB中测试通过。

 

/**************************************************
 ** 文件说明: 二分法查找目标数据所在数组中的位置索引 演示
 ** 作者    : foxpro2005
 ** 日期    : 2013-03-12
 ** QQ      : 5894398
 **************************************************/
#include <stdio.h>

int Table[15]={
    3,9,16,20,26,31,38,42,47,51,58,66,73,87,98
};

/**************************************************
 ** 函数功能: 二分法查找目标数据所在数组中的位置索引
 **************************************************/
int SearchTable(int *pTable, int TabSize, int x)
{
        int mid, btm = 0, top = --TabSize;

        if(x < pTable[btm + 1]){                            // 超出下限,锁定在btm索引值范围
                return btm;
        }else if(x < pTable[top]){              // 在表格范围内
                while((top - btm) != 1)                        // 2分法查找区间
                {
                        mid = (btm + top) >> 1;         // /2
                        if(x > pTable[mid]){
                                btm = mid;
                        }
                        else if(x < pTable[mid]){
                                top = mid;
                        }
                        else{
                                return mid;                 // 正好等于mid位所在值
                        }
                }
                return btm;                                                // 找到一个区间,并返回这个区间的开始索引值(以向下原则)
        }
        else{                                                // 超出上限,锁定在top索引值范围
                return top;
        }

}

int main(void)
{
        int i,x;

        for(i=0; i < (sizeof(Table) / sizeof(Table[0])); i++){
                if(i==0)
                        printf("Table={%d",Table[i]);
                else
                        printf(",%d",Table[i]);
        }
        printf("}\n");
        printf("Enter -1 can be end\n");

        while(1){
                printf("Please intput a new number: ");
                scanf("%d",&x);
                if(x == -1)
                        break;
                else{
                        printf("\n%d's index is %d\n",x,SearchTable(Table, (sizeof(Table) / sizeof(Table[0])), x));
                }
        }

        return -1;
}

 

以上代码是在CodeBlocks中编写。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值