您的位置:首页 > 其它

二分查找与递归算法

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: