二分查找与递归算法
2014-06-19 23:17
253 查看
1.给一个有序数组a[],大小为n,且n非常大,求数组中是否存在k? 这里我们采用二分查找算法结合递归/循环,降低时间复杂度来求解。
//二分查找的递归算法,k为要查找的数
int recSearch(int
a[],int low,
int high,
int k) {
int mid;
if (low >high) return
-1;
mid = low + (high - low)/2;
if (a[mid] == k ) return
k;
else{
if (a[mid]>k) high = mid -1;
else low
= mid + 1;
return
recSearch(a, low, high, k);
}
return -1;
}
//二分查找算法的非递归实现,k为要查找的数
int search(int
a[],int low,
int high,
int k) {
int mid;
while (low<=high) {
mid = low + (high - low)/2;
if (a[mid] == k ) return
k;
else
if (a[mid]>k)
high = mid -
1;
else
low = mid +
1;
}
return -1;
}
2.计算从原点到达(m,n)的走发数
int road (int
m, int n) {
if
(n<0 || m<
0) {
return
-1;
}else
if( m==0
|| n==0){
return
1;
}else
return
road(m-1,
n)+road(m, n-1);
}
//二分查找的递归算法,k为要查找的数
int recSearch(int
a[],int low,
int high,
int k) {
int mid;
if (low >high) return
-1;
mid = low + (high - low)/2;
if (a[mid] == k ) return
k;
else{
if (a[mid]>k) high = mid -1;
else low
= mid + 1;
return
recSearch(a, low, high, k);
}
return -1;
}
//二分查找算法的非递归实现,k为要查找的数
int search(int
a[],int low,
int high,
int k) {
int mid;
while (low<=high) {
mid = low + (high - low)/2;
if (a[mid] == k ) return
k;
else
if (a[mid]>k)
high = mid -
1;
else
low = mid +
1;
}
return -1;
}
2.计算从原点到达(m,n)的走发数
int road (int
m, int n) {
if
(n<0 || m<
0) {
return
-1;
}else
if( m==0
|| n==0){
return
1;
}else
return
road(m-1,
n)+road(m, n-1);
}
相关文章推荐
- 二分查找的非递归与递归算法
- 顺序表二分查找递归算法
- 递归算法——归并排序,快速排序,二分查找
- 二分查找的递归算法程序
- 二分查找的递归算法(折半查找)
- 二分查找的递归算法(附源码)_AX
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- Java实现二分查找的递归算法
- 二分查找的递归算法(附源码)_
- 【C语言】二分查找递归算法
- 二分查找递归非递归算法对比
- STL之二分查找:hdu 5178 ( BestCoder Round #31 1001 )
- 二分查找
- 基础算法 - 二分查找 / 二分答案入门
- 优化的二分查找插入算法
- 二分查找的边界问题
- 算法导论_二分查找
- 算法 查找算法--二分查找
- 剑指offer——面试题38:数字在排序数组中出现的次数(利用二分查找来找第一次和最后一次的位置)
- 二分查找示例