首页 > 其他 > 详细

二分查找

时间:2020-02-25 09:44:48      阅读:53      评论:0      收藏:0      [点我收藏+]
/*
    先定数组长度,无法获取一个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("折半查找!至少两个数据嘛!\n", len, mid);
        return;
    }

    
    
    while (low <= higt) {

        mid = (low + higt) / 2 ;
        printf("当前数组长度=>%d,mid=>%d\n", len, mid);
        if ( a[mid] == key ) {
            printf("已经找到\n");
            return;
        }else if( a[mid] < key ){
            low = mid + 1;
        }else if (a[mid] > key) {//大于key
            higt = mid - 1;
        }else {
            printf("抱歉怕是出了一些奇怪的问题!\n");
            return;
        }
    }
    printf("抱歉啥也没有!\n");
}

 

二分查找

原文:https://www.cnblogs.com/cfas/p/12359797.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!