二分查找

/*
    先定数组长度,无法获取一个Int数组的真实长度 如 int a[20]={1,2}
    实际长度是多少呢? sizeof(a)/sizeof(a[0])是算不出来的!只能自己写函数了!
    注意,二分查找是查找一个有序的序列,这里的演示的有序,有两种
    1、bindSearch函数自身提供的数组(索引器)的下标有序,废话,数组本来就有序。
    2、被查找的数据的索引也要有序,什么意思?看一个json结构
    [
        {
            id:1,name:mike
        },
        
        {
            id:2,name:rock
        },
    
    ]    
    所以这里的id必须排序
*/

void bindSearch() {

    /*    low ---- mid------higt      */
    
    int low = 0, 
        higt,
        mid = 0,
        len, 
        a[] = { 1,3,4,12,13,15 },
        key=1;

    len = sizeof(a) / sizeof(a[0]) - 1;
    higt = len-1;

    if (len <= 0) {

        printf("折半查找!至少两个数据嘛!
", len, mid);
        return;
    }

    
    
    while (low <= higt) {

        mid = (low + higt) / 2 ;
        printf("当前数组长度=>%d,mid=>%d
", len, mid);
        if ( a[mid] == key ) {
            printf("已经找到
");
            return;
        }else if( a[mid] < key ){
            low = mid + 1;
        }else if (a[mid] > key) {//大于key
            higt = mid - 1;
        }else {
            printf("抱歉怕是出了一些奇怪的问题!
");
            return;
        }
    }
    printf("抱歉啥也没有!
");
}
原文地址:https://www.cnblogs.com/cfas/p/12359797.html