二分查找的递归与非递归实现
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;
}
递归实现:
#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;
}
相关文章推荐
- 二分查找的递归与非递归实现【Java版】
- 数据结构10:二分查找的递归与非递归表示与实现
- PHP递归与非递归实现二分查找
- C++ 二分查找的递归与非递归实现
- 二分查找算法的递归与非递归实现
- 二分查找的递归与非递归实现
- 二分查找(递归与非递归实现)
- 二分查找,递归与非递归实现
- 数据结构:二分查找的递归与非递归实现--C实现
- 二分查找的递归与非递归实现
- 二分查找的递归与非递归实现
- 二分查找 递归实现 和 循环实现
- 二分查找的递归与非递归!
- Java实现折半查找(二分查找)的递归和非递归算法
- Java实现折半查找(二分查找)的递归和非递归算法
- C++数据结构--二分查找的递归和非递归实现
- 二分查找非递归实现--【编程珠玑】
- C语言实现 二分查找数组中的Key值(递归和非递归)
- 漫谈递归:二分查找算法的递归实现
- 一个递归和非递归实现二分查找的代码