学习java,挺好玩的呢
 /**
     * 查找数组的元素(二分法)  有循序的数组元素
     *
     * @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;
}
}
}
 

 

posted on 2019-03-05 11:42  axu521  阅读(114)  评论(0编辑  收藏  举报

<