折半查找
将数组一分为二 之后比较查找哈
输入一个数 查找这个数在数组中位于哪个位置 并将下标返回
方法: 将数组操作成升序(降序也可以哈 这个案例是升序的方法哈) 然后分成左右2半 将需要查找得数与左右2半数组和中间数比较 比较之后通过改变数组头和数组尾逐渐缩小范围哈
package algor;
import java.util.Arrays;
public class AlgorithmOne {
public static void main(String[] args) {
int[] arr = {2, 11, 333, 43, 23, 21};
System.out.println(BinaryData(arr,333));
}
/**
* 折半查找 将数组和要查找的数传入方法中 有的话返回下标 没有的话返回-1
*/
public static int BinaryData(int[] arr,int a){
//对数组进行排序升序哈 这个是数组封装好的方法哈 这样才能分成左右2半呢
Arrays.sort(arr);
//输出升序后的数组
for (int i:arr) {
System.out.print("i++"+i);
}
//开始下标 数组下标从0开始哈
int sta=0;
//结束下标 为数组长度减去1哈
int end=arr.length-1;
//只有左边小于右边 才符合条件哈
while(sta<=end){
//先取个中间值 这个是中间值的下标哈
int mid=(sta+end)/2;
//当要查找的数大于中间值时候就说明这个值位于右边 刚开始头部是整个数组的头部 则将头部变成中间值加1
if(a>arr[mid]){
sta=mid+1;
//当要查找的数小于中间值时候就说明这个值位于左边 则将尾巴变成中间值件减1
// 因为中间值已经分出来了 就是mid 要另外比较哈
}else if(a<arr[mid]){
end=mid-1;
}else{
return mid;
}
}
return -1;
}
}