/** * 查找数组的元素(二分法) 有循序的数组元素 * * @param arr 数组 * @param num1 查找的元素 * @return 返回查找元素出现的位置 */ public static int looks(int[] arr, int num1) { int left=0; 左边索引 int right=arr.length-1; 右边索引 int no=-1; 如果没有找到返回 -1 while (left<right){ 左边小于右边 int min=(right+left)/2; 取中间索引值 if(arr[min]==num1){ 找到目标元素 return min; 返回 }else if(arr[min]>num1){ 如果目标元素小于中间索引位置元素 就把右边索引收缩到中间位置(并-1) right=min-1; }else{ 如果目标元素大于中间索引位置元素 就把左边索引收缩到中间位置(并+1) left=min+1; } } return no; }
二分法实战:::
自己定义一个目标值,利用Random生成随机数,用自己的目标值找到随机数。。。。。
/**
* random
* 将 随机数不参与运算,如(25 < 45 < 50),只参与比较,从而找到随机数
*
* @return
*/
public static void rendo2(int target) { 目标数设置为 1(因为目标数如果太大, /2 也回不到(mix < ran < target)条件 )
Random randoms = new Random();
int ran = (byte) randoms.nextInt(); 生成随机数
System.out.println("随机数是:"+ran);
int count=0; 计数器循环多少次
while (ran != target) { 随机数不等于目标值就循环
count++;
if (ran > 0) { 随机数如果大于0
if (ran > target) { 如果随机数大于目标数就 让目标数不断 *2 直到目标数大于随机数
target = target * 2;
}else if(ran<target){ 目标数大于随机数
int mix=target/2; 再将目标数 /2 这样就得到了 mix < ran < target
binaryseek(mix,ran,target,count); 进入二分法,肯定可以找到 随机数
return;
}
}else{ 随机数如果小于0
if(ran<target){ 和正数相反
target=target*2;
}else if(ran>target){ 和正数相反
int mixx=target/2;
binaryseek(mixx,ran,target,count);
return;
}
}
}
}
/**
* 二分查找方法
* @return
*/
public static int binaryseek(int mix,int key,int max,int count){
while (true){
count++;
int temp=(mix+max)/2;
if(temp==key){
System.out.println("找到"+temp);
System.out.println("计数器"+count);
return temp;
}else if(temp<key){
mix=temp+1;
}else {
max=temp-1;
}
}
}
好好学习,天天向上。
努力工作,给自己的和家人一个满意的答案。。。。