package datastruct.find;
public class BinarySearch {
//方法一:非递归折半查找:
private static void binarySearch(int a[],int k) {
int low=0;
int high=a.length-1;
int mid;
while (low<=high) {
mid=(low+high)/2;
if (k==a[mid]) {
System.out.println(a[mid]+"在"+mid+"位置");
return;
}else {
if (k<a[mid]) {
high=mid-1;
}
else {
low=mid+1;
}
}
}
System.out.println("无法查找到该元素!");
}
//方法二:使用递归的折半查找
private static int binarySearch(int a[],int k,int low,int high ) {
if (a.length<=0) {
System.out.println("数组内元素为空!");
return -1;
}
if (low>high) {
System.out.println("无法查找到该元素!");
return -1;
}else {
int mid=(low+high)/2;
if (k==a[mid]) {
System.out.println(a[mid]+"在"+mid+"位置");
return mid;
}else {
if (k<a[mid]) {
return binarySearch(a, k, low, mid-1);
}else {
return binarySearch(a, k, mid+1, high);
}
}
}
}
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7};
System.out.println("非递归算法:");
binarySearch(a, 1);
binarySearch(a, 2);
binarySearch(a, 3);
binarySearch(a, 4);
binarySearch(a, 5);
binarySearch(a, 6);
binarySearch(a, 7);
System.out.println("递归算法:");
binarySearch(a, 1, 0, a.length-1);
binarySearch(a, 2, 0, a.length-1);
binarySearch(a, 3, 0, a.length-1);
binarySearch(a, 4, 0, a.length-1);
binarySearch(a, 5, 0, a.length-1);
binarySearch(a, 6, 0, a.length-1);
binarySearch(a, 7, 0, a.length-1);
}
}
运行结果:
非递归算法:
1在0位置
2在1位置
3在2位置
4在3位置
5在4位置
6在5位置
7在6位置
递归算法:
1在0位置
2在1位置
3在2位置
4在3位置
5在4位置
6在5位置
7在6位置