1.二分查找要求:
1.必须是顺序结构
2.必须是大小有序排列
2.原理:
将数组分为3部分,分别是中值前,中值,中值后(所谓的中值是指数组中间的那个数);将想要查找的数先和中值对比。若小于中值,则在中值前面找;若大于中值,则在中值后面找;等于中值,则返回。依次递归继续完成将中值的前半部分和后半部分的分解查找
3.分别有循环和递归两种方式实现
public class erfen {
public static void main(String[] args) {
int[] array = {1,2,3,4,5,6};
System.out.println("循环实现二分查找:"+demo1(array, 4));
System.out.println("递归实现二分查找:"+demo2(array, 6, 0, array.length-1));
}
/**
* 循环实现
* @param array
* @param key
* @return
*/
public static int demo1(int[] array,int key) {
int low = 0;
int high = array.length-1;
while(low<=high) {
int middle = (low+high)/2;
if (key == array[middle]) {
return middle;
}else if (key<array[middle]) {
high = middle-1;
}else {
low = middle+1;
}
}
return -1;
}
/**
* 递归实现
* @param demo2
* @param key
*/
public static int demo2(int[] array,int key,int beginindex,int lastindex) {
int middleindex = (beginindex+lastindex)/2;
if (key<array[beginindex]||key>array[lastindex]||beginindex>lastindex) {
return -1;
}
if (key<array[middleindex]) {
return demo2(array, key, beginindex, middleindex-1);
}else if (key>array[middleindex]) {
return demo2(array, key, middleindex+1, lastindex);
}else {
return middleindex;
}
}
}