折半查找
来源:互联网 发布:北京招聘ios程序员 编辑:程序博客网 时间:2024/06/06 05:17
设两个变量left和right分别表示被查找表的左边界和右边界,初始化时,left=0,right=n-1。令middle=(left+right)/2为list的中间位置。如果将list[middle]与需要查找的数searchnum做比较,则会出现下列3种情况。
- searchnum < list[middle]。把查找右边界right设置为middle - 1。
- searchnum = list[middle]。返回middle
- searchnum > list[middle]。把查找左边界left设置为middle + 1。
迭代:
#define COMPARE(x,y) (((x) < (y))? -1: ((x) == (y)) ? 0 : 1)int binsearch(int list[], int searchnum, int left, int right){ int middle; while(left <= right) { middle = (left + right) / 2; switch(COMPARE(list[middle],searchnum)) { case -1: left = middle + 1; break; case 0: return middle; case 1: right = middle - 1; break; } }}
递归:
#define COMPARE(x,y) (((x) < (y))? -1: ((x) == (y)) ? 0 : 1)int binsearch(int list[], int searchnum, int left, int right){ int middle; if(left <= right) { middle = (left + right) / 2; switch(COMPARE(list[middle],searchnum)) { case -1: return binsearch(list, searchnum, middle + 1, right) case 0: return middle; case 1: return binsearch(list, searchnum, left, middle - 1) } } return -1;}
0 0
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 折半查找
- 求表中数据占总数百分比的SQL
- Generic Netlink详解
- Phonegap中自定义插件的使用
- vim编辑器使用方法
- HDU4925:Apple Tree
- 折半查找
- 【神经网络学习笔记】LIBSVM参数讲解
- vmlinux, zImage, Image的区别
- CUDA 6.0在 VS 2010下的安装和配置
- 网络爬虫(一)-------抓取网页之理解URL
- IT忍者神龟之查看、修改oracle字符集,查看oracle版本
- QtCreator 点击标题排序,QHeadView
- chrome JavaScript 断点设置和调试技巧
- Tachyon 分布式内存文件系统