博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构---二分查找算法
阅读量:5816 次
发布时间:2019-06-18

本文共 1456 字,大约阅读时间需要 4 分钟。

1. 请自行学习二分查找算法,并实现以下函数

 - 1.1 
在一个已排序的整型数组array
中,假设已知array
数组的元素个数为n
,需要查找的关键值为key
,要求在array
数组中查找值为key
的数字,并返回该数字在数组中对应的索引值。请设计并实现该函数。
#include<stdio.h>
int bsearch1(int *array,int key,int n)
{
    int low=0,high=n-1,mid;
    
while(low<=high)
    {
        mid=(low+high)/2;
        if(array[mid]==key)
        {
            printf("find out the key and its index is %d\n",mid);
            return mid;
        }
        if(array[0]<array[n-1])
        {
            if( array[mid] > key )
                high = mid-1;
            else
                low = mid+1;
        }
        else
        {
            if(key<array[mid])
                low=mid+1;
            else
                high=mid-1;
        }       
    }
    printf("key is not in this array!\n");
    return -1;  
}
 - 1.2 
在标准C
库中,二分查找函数bsearch
的原型如下:
void *bsearch(const void *key, const void *base, size_t nmemb,
                       size_t size, int (*compar)(const void *, const void *))
 
实现代码如下:
void*  bsearch2(const void *key, const void *base, size_t nmemb,size_t size, int (*compar)(const void *, const void *))
{
    size_t low=0,high=nmemb-1;
    size_t mid;
    void *p;
    int result;
    while(low <=high)
    
{
        mid=(low+high) /2;
        
p=(void*) ( (char*)base +mid *size);
//
注意
char
的使用
p point to mid
        result=(*compar)(key,p);
        if(result==0)                                 
            return p;
        else if(result < 0)
            high=mid-1;
        else
            low=mid+1;
    
}
 
    return NULL;
}
 
int compare(const void *a,const void *b )//compare的实现;
{
    
return (*(int*)a-*(int*)b);
}  
int main()
{
  
    int a[8]={1,3,4,7,9,10,14,16};
    int b[8]={16,14,10,9,7,4,3,1};
    int *q;
    bsearch1(a,3,8);
    bsearch1(b,3,8);
    q=(int*)bsearch2(&a[3],a,8,4,compare);
    printf("the key's index is %d\n",q-a);
    
return 0;
} 
本文转自 曾永刚 51CTO博客,原文链接:http://blog.51cto.com/zyg0227/231860

转载地址:http://voqbx.baihongyu.com/

你可能感兴趣的文章
线性表4 - 数据结构和算法09
查看>>
C语言数据类型char
查看>>
Online Patching--EBS R12.2最大的改进
查看>>
Binary Search Tree Iterator leetcode
查看>>
Oracle性能优化--DBMS_PROFILER
查看>>
uva-317-找规律
查看>>
Event事件的兼容性(转)
查看>>
我的2014-相对奢侈的生活
查看>>
zoj 2412 dfs 求连通分量的个数
查看>>
Java设计模式
查看>>
一文读懂 AOP | 你想要的最全面 AOP 方法探讨
查看>>
Spring Cloud 微服务分布式链路跟踪 Sleuth 与 Zipkin
查看>>
ORM数据库框架 SQLite 常用数据库框架比较 MD
查看>>
华为OJ 名字美丽度
查看>>
微信公众号与APP微信第三方登录账号打通
查看>>
onchange()事件的应用
查看>>
Windows 下最佳的 C++ 开发的 IDE 是什么?
查看>>
软件工程师成长为架构师必备的十项技能
查看>>
python 异常
查看>>
百度账号注销
查看>>