您的位置:首页 > 其它

二分查找的递归与非递归实现

2016-09-12 21:44 218 查看
假设有一个已经升序排好序的数组 nums,和一个数值val ,求val 是否在nums 中,如果存在则返回nums对应项的index ,否则返回-1;

递归实现:

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int func(int val,int nums[],int begin,int end){
if(begin > end) return -1;
int mid = (begin+end)/2;
if(nums[mid]==val) return mid;
if(nums[mid]>val){
return func(val,nums,begin,mid-1);
}else{
return func(val,nums,mid+1,end);
}

}
int main(){
int nums[] = {1,2,3,4,5,6,7,8};
int val = 3;
cout<<func(val,nums,0,sizeof(nums));
return 0;
}


非递归实现,当时竟然晕了写成堆栈了,真是脑残
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int func(int val,int nums[],int length){
if(length<=0) return -1;
int begin = 0,end = length-1;
while(begin <= end){
int mid = (begin+end)/2;
if(nums[mid]==val) return mid;
if(nums[mid]>val){
end = mid-1;
}else{
begin = mid+1;
}
}
return -1;
}
int main(){
int nums[] = {1,2,3,4,5,6,7,8};
int val = 3;
cout<<func(val,nums,sizeof(nums));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: