二分法查找。
二分法查找适用于有序排列的数组。每次从中间开始,在想两边进行查找。
二分法的普通方法实现:
public static void main(String args[]){
int []a = {0,1,2,3,4,5,6,7,8,9};
System.out.println(find(a,5));
}
public static int find(int []a, int des){
int length = a.length - 1;
int len = length / 2;
while(len <= length){
if(a[len] == des)
return len + 1;
else if(a[len] < des){
len = (length + len)/2;
}
else if(a[len] > des){
length = len;
len = len / 2;
}
}
return 0;
}
二分法的递归实现
public static int find(int a[], int des){
int height = a.length - 1;
int middle = height / 2;
int low = 0;
int n = jisuan(a, low, middle, height, des);
return n;
}
public static int jisuan(int a[], int low, int middle, int height, int des){
if(middle < height){
if(a[middle] == des)
return middle;
else if(a[middle] > des){
return jisuan(a, low, middle / 2, middle, des);
}
else if(a[middle] < des){
return jisuan(a, middle, (middle + height) / 2, height, des);
}
}
return 0;
}
public static void main(String args[]){
int[] a = {1,2,3,4,5,6,7,8,9};
int key = find(a, 6);
System.out.println(key);
}