算法回顾(三) 二分查找
2015-08-12 16:22
225 查看
二分查找,顾名思义,它的原理是,将排序好的数列分成两部分,判断期待值在高位部分还是在低位部分,然后再将期待值所在的那个区间的数列重新按照这个规则划分成两部分,再比较,直到最后不能划分为止。
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
假设其数组长度为n,那么该算法复杂度为o(log(n))。代码如下:
ps.第三行是为了防止int相加后超过int的最大值,故采用这样的算法。
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
假设其数组长度为n,那么该算法复杂度为o(log(n))。代码如下:
int binarySearch( int *a , int begin, int end, int key) { int mid = begin + ((end - begin)>>1 ), index; index = a[mid] < key && begin +1 < end ? binarySearch(a, mid+1, end ,key): (a[mid] > key && begin + 1 < end ? binarySearch(a, begin, mid, key): mid*(a[mid] == key) + (-1)*(a[mid] != key) ); return index; }
ps.第三行是为了防止int相加后超过int的最大值,故采用这样的算法。
相关文章推荐
- mongodba安装及配置windows
- Generate Parentheses
- JAVA并发编程
- 微信浏览器网页授权JS封装
- 220 Contains Duplicate III
- java邮件发送和短信发送(一)
- win7 下adb server is out of date. killing... 连接手机问题已解决
- android与js交互(二)
- 哈希表(散列表)
- 字符输入,输出问题
- C#中的泛型
- SQLite 日期 & 时间
- Linux系统排查4——网络篇
- C++/CLI托管
- 自定义GridView六宫格
- Java FileInputStream/FileOutputStream的应用 文件读取和写入
- 鼠标放到图片上实现动态的效果
- 解决混淆报错问题-打包签名出现问题的解决方法
- 数据结构Java实现01----算法概述
- 关于C#反射(转载)