数组二分查找(根据元素)
代码详解
package arrays;
/**
数组二分查找
条件:数组元素不能重复且有序
结果:有则返回下标元素
无则返回-1
*/
public class ArrayBinarySearch {
public static void main(String[] args) {
//初始化一个有序无重复的数组为目标查询数组
int[] arr=new int[]{0,1,2,3,4,5,6,7,8,9};
//查找目标元素
int a=10;
//查找的结果
int index=-1;
//数组开始下标
int head=0;
//数组结束小标
int end=arr.length-1;
//数组中间下标
int binary=(end+head)/2;
//while循环遍历数组二分查找
while(true){
//查询的元素不在数组范围内,则直接退出循环
if(a<arr[head] || a>arr[end]){
break;
}
//判断中间下标的元素是否与查找元素相同
if(arr[binary]==a){
//相同,则直接将下标赋值给结果index
index=binary;
//找到结果退出循环
break;
//中间下标的元素与查找元素不相同
}else{
//再次判断,中间下标元素的值是否大于查找的元素,如果大于,则重新赋值数组结束下标,查找前半段
if(arr[binary]>a){
//重新赋值数组结束下标
end=binary-1;
//中间下标元素的值小于查找的元素,则重新赋值数组开始下标,查找后半段
}else{
//重新赋值数组开始下标
head=binary+1;
}
//数组中间下标重新赋值
binary=(end+head)/2;
}
}
//查询结果输出
System.out.println("数组二分查找,元素"+a+"的下标:"+index);
}
}
数组二分查找方法简易封装
package arrays;
/**
* 数组二分查找方法简易封装
* @author Administrator
*
*/
public class BinarySearch {
public int binarySearch(int a,int[] arr){
//查找的结果
int index=-1;
//数组开始下标
int head=0;
//数组结束小标
int end=arr.length-1;
//数组中间下标
int binary=(end+head)/2;
//while循环遍历数组二分查找
while(true){
//查询的元素不在数组范围内,则直接退出循环
if(a<arr[head] || a>arr[end]){
break;
}
//判断中间下标的元素是否与查找元素相同
if(arr[binary]==a){
//相同,则直接将下标赋值给结果index
index=binary;
//找到结果退出循环
break;
//中间下标的元素与查找元素不相同
}else{
//再次判断,中间下标元素的值是否大于查找的元素,如果大于,则重新赋值数组结束下标,查找前半段
if(arr[binary]>a){
//重新赋值数组结束下标
end=binary-1;
//中间下标元素的值小于查找的元素,则重新赋值数组开始下标,查找后半段
}else{
//重新赋值数组开始下标
head=binary+1;
}
//数组中间下标重新赋值
binary=(end+head)/2;
}
}
return index;
}
}