博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:6196 次
发布时间:2019-06-21

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

hot3.png

下面的函数模板实现了二分查找。

功能:

从一个数组a[]的 i 到 j 的位置中寻找值为m的元素。如果找到,返回找到元素的索引值;找不到,返回-1。

要求:

类型T必须重载【==】和【<】。

template
int Func(const T a[], int i, int j, const T &m){    if (i < 0 || i > j || a == nullptr)    {        return -1;    }    else if (i == j)    {        return (a[i] == m) ? i : -1;    }    auto k = (i + j) / 2;    if (a[k] == m)    {        return k;    }    else if (a[k] < m)    {        return Func(a, k + 1, j, m);    }    else    {        return Func(a, i, k - 1, m);    }}

测试一下:

int a[] = { 1,3,6,8,12,24 };char b[] = { 3,8,12,44,120 };/*X重载了==和<*/class X{private:    int m_;public:    explicit X(int m) :m_{ m }    {}    bool operator==(const X &other) const    {        return m_ == other.m_;    }    bool operator<(const X &other) const    {        return m_ < other.m_;    }};X c[] = { X(1),X(3),X(5),X(7),X(90),X(111) };int wmain(){    int n = -100;    n = Func(a, 0, 6, 12);    std::cout << n << std::endl; // 4    n = Func(b, 2, 4, char(8));    std::cout << n << std::endl; // -1    n = Func(c, 0, 6, X(1));    std::cout << n << std::endl; // 0    return 0;}

转载于:https://my.oschina.net/jthmath/blog/493039

你可能感兴趣的文章
我的友情链接
查看>>
自我介绍
查看>>
checkinstall .deb .rpm slackware
查看>>
2011.11.14 ixx 方案尝试
查看>>
关于.NET标准的信息
查看>>
PHP安装libevent后出现undefined symbol: php_sockets_le_socket in Unknown 的解决办法
查看>>
找到了一个rancher的平台
查看>>
RHEL6.4更改为CentOS源
查看>>
RHEL5查看gcc是否安装和如何安装gcc的方法
查看>>
mysql 查看数据大小语句
查看>>
inotify 文件同步整理
查看>>
centos编译安装squid3.4
查看>>
2012年7月的主要目标
查看>>
对eclipse已经彻底失去信心,全心全意转向idea,特转载常用快捷键如下
查看>>
Win8 建立Ad-hoc网络共享
查看>>
openstack部署实战第2版之Open vSwitch
查看>>
quarz定时任务报no session 错误
查看>>
TCP/IP的6个标志位
查看>>
Bug分级原则
查看>>
输出一个字符串中第一个只出现过一次的字符
查看>>