二分查找递归与非递归实现
2013-12-16 21:05
295 查看
二分查找思想:将有序序列按照中间位置分为两半,如果中间元素与待查找元素相等,则返回;
如果中间元素小于待查找元素,则在右半边查找;否则在左半边查找。
Java递归实现:
public static int find(int[] a,int begin,int end,int b){
if(begin==end){
if(a[begin]==b) return begin;
return -1;
}
int mid=(begin+end)/2;
if(a[mid]==b) return mid;
else if(a[mid]>b){
return find(a,begin,mid-1,b);
}else{
return find(a,mid+1,end,b);
}
}
Java非递归实现:
public static int find(int[] a,int b){
int left=0;
int right=a.length-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]==b){
return mid;
} else if(a[mid]>b){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
如果中间元素小于待查找元素,则在右半边查找;否则在左半边查找。
Java递归实现:
public static int find(int[] a,int begin,int end,int b){
if(begin==end){
if(a[begin]==b) return begin;
return -1;
}
int mid=(begin+end)/2;
if(a[mid]==b) return mid;
else if(a[mid]>b){
return find(a,begin,mid-1,b);
}else{
return find(a,mid+1,end,b);
}
}
Java非递归实现:
public static int find(int[] a,int b){
int left=0;
int right=a.length-1;
while(left<=right){
int mid=left+((right-left)>>1);
if(a[mid]==b){
return mid;
} else if(a[mid]>b){
right=mid-1;
}else{
left=mid+1;
}
}
return -1;
}
相关文章推荐
- 二分查找的递归和非递归实现
- 二分查找的递归与非递归实现
- 二分查找的递归与非递归实现
- M--二分查找 递归实现
- Java实现折半查找(二分查找)的递归和非递归算法
- 二分查找的递归与非递归实现
- 二分查找算法递归和非递归实现
- 二分查找的递归与非递归实现
- 二分查找递归与非递归实现
- 旋转数组查找, 二分查找的递归于非递归实现
- Java实现折半查找(二分查找)的递归和非递归算法
- 二分查找非递归与递归实现
- 二分查找的递归/非递归方式C++实现
- Java实现折半查找(二分查找)的递归和非递归算法
- 二分查找递归和非递归实现
- 插入排序的递归实现和二分查找递归实现,算法导论2.3-4和2.3-5
- 二分查找的非递归实现
- 二分查找递归和非递归实现
- [整理]二分查找搜索算法原理及递归,迭代方法实现
- C 二分查找 递归与非递归的实现代码