c++实现二分查找
来源:互联网 发布:坐标转换软件安卓版 编辑:程序博客网 时间:2024/06/06 17:58
二分查找又称折半查找,对排好序的数组,每次取这个数和数组中间的数进行比较,时间复杂度是O(logn)。
设数组为a[n],查找的数x,如果x==a[n/2],则返回n/2;
如果x < a[n/2],则在a[0]到a[n/2-1]中进行查找;
如果x > a[n/2],则在a[n/2+1]到a[n-1]中进行查找;
优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
条件:查找的数组必须要为有序数组。
1.递归实现
/* 归的二分查找 arrat:数组 , low:上界; high:下界; target:查找的数据; 返回target所在数组的下标 */ int binarySearch(int array[], int low, int high, int target) { int middle = (low + high)/2; if(low > high) { return -1; } if(target == array[middle]) { return middle; } if(target < array[middle]) { return binarySearch(array, low, middle-1, target); } if(target > array[middle]) { return binarySearch(array, middle+1, high, target); } }
2.循环实现
/* 非递归的二分查找 arrat:数组 , n:数组的大小; target:查找的数据; 返回target所在数组的下标 */ int binarySearch2(int array[], int n, int target) { int low = 0, high = n, middle = 0; while(low < high) { middle = (low + high)/2; if(target == array[middle]) { return middle; } else if(target < array[middle]) { high = middle; } else if(target > array[middle]) { low = middle + 1; } } return -1; }
推荐使用非递归的方式,因为递归每次调用递归时有用堆栈保存函数数据和结果。能用循环的尽量不用递归。
0 0
- C语言实现二分查找
- 二分查找 c语言实现
- 二分查找C语言实现
- 二分查找实现 C代码
- C语言实现二分查找
- 二分查找 C/C++实现
- c语言 实现二分查找
- c语言实现二分查找
- 二分查找算法的C/C++实现
- C语言实现二分查找算法
- C语言实现二分查找算法
- c语言二分查找泛型实现
- 二分查找的C语言实现
- c语言利用递归实现二分查找
- 二分查找算法的C语言实现
- c语言实现二分查找算法
- c++/java/python 实现二分查找
- 用C语言实现二分查找算法
- Genymotion 的启动出现问题 no ip
- HBase JAVA api
- Android SO 文件的兼容和适配
- CSU 1120 病毒(最长公共递增子序列LICS)
- 进程间通信---共享内存
- c++实现二分查找
- 必须有数字和字母组合的密码正则表达式
- 除法求逆元(扩展欧几里德和费马小定理)
- Python 3基础教程41-多线程不一定效率就高
- “不念过往,不畏将来”——2017年山东省第八届ACM大学生程序设计竞赛总结
- 【Oracle学习】之 聚合函数 和 联合语句
- Oracle试图--V$SESSION_EVENT
- Linux学习之四(复制移动文件命令cp等及查看文本命令cat等)
- 002