SW练习_二分查找

package info.frady.algo;

import java.util.Arrays;
import java.util.LinkedList;

/**
 * 写一个二分查找
 * 20200209
 * meng3.wei
 */

public class BinarySearch {

    public static void main(String args[]){
        int[] arrs={1,2,3,4,5,7,8,  9,11,15,56,77,  88};

        /*System.out.printf("%d 在数组的位置是 %d\n",1,search(arrs,1));
        System.out.printf("%d 在数组的位置是 %d\n",3,search(arrs,3));
        System.out.printf("%d 在数组的位置是 %d\n",5,search(arrs,5));
        System.out.printf("%d 在数组的位置是 %d\n",7,search(arrs,7));
        System.out.printf("%d 在数组的位置是 %d\n",8,search(arrs,8));
        System.out.printf("%d 在数组的位置是 %d\n",9,search(arrs,9));
        System.out.printf("%d 在数组的位置是 %d\n",11,search(arrs,11));
        System.out.printf("%d 在数组的位置是 %d\n",15,search(arrs,15));
        System.out.printf("%d 在数组的位置是 %d\n",56,search(arrs,56));
        System.out.printf("%d 在数组的位置是 %d\n",77,search(arrs,77));
        System.out.printf("%d 在数组的位置是 %d\n",88,search(arrs,88));
        System.out.printf("%d 在数组的位置是 %d\n",0,search(arrs,0));
        System.out.printf("%d 在数组的位置是 %d\n",99,search(arrs,99));*/

        LinkedList<Integer> list=new LinkedList<Integer>();
        for (int i = 0; i < arrs.length; i++) {
            list.add(arrs[i]);
        }
        System.out.println(Arrays.toString(arrs));
        System.out.printf("%d 在数组的位置是 %d\n",1,searchList(list,1));
        System.out.printf("%d 在数组的位置是 %d\n",3,searchList(list,3));
        System.out.printf("%d 在数组的位置是 %d\n",4,searchList(list,4));
        System.out.printf("%d 在数组的位置是 %d\n",5,searchList(list,5));
        System.out.printf("%d 在数组的位置是 %d\n",7,searchList(list,7));
        System.out.printf("%d 在数组的位置是 %d\n",8,searchList(list,8));
        System.out.printf("%d 在数组的位置是 %d\n",9,searchList(list,9));
        System.out.printf("%d 在数组的位置是 %d\n",11,searchList(list,11));
        System.out.printf("%d 在数组的位置是 %d\n",15,searchList(list,15));
        System.out.printf("%d 在数组的位置是 %d\n",56,searchList(list,56));
        System.out.printf("%d 在数组的位置是 %d\n",77,searchList(list,77));
        System.out.printf("%d 在数组的位置是 %d\n",88,searchList(list,88));
        System.out.printf("%d 在数组的位置是 %d\n",0,searchList(list,0));
        System.out.printf("%d 在数组的位置是 %d\n",99,searchList(list,99));

    }

    public static int search(int[] arrs,int a){
        int low=0;
        int high=arrs.length-1;
        while(low<=high){
            int mid=(low+high)/2;
            if(arrs[mid]==a){
                return mid;
            }else if(arrs[mid]>a){//要查找的a在当前的左边,需要修改高位
                high=mid-1;
            }else{//在右边,需要修改低位
                low=mid+1;
            }

        }
        return -1;
    }

    public static int searchList(LinkedList<Integer> arrs, int a){//返回的是 大于等于这个数字的 最小数字位置
        int low=0;
        int high=arrs.size()-1;
        while(low<=high){
            int mid=(low+high)/2;
            if(arrs.get(mid)==a){
                return mid;
            }else if(arrs.get(mid)>a){//要查找的a在当前的左边,需要修改高位
                high=mid-1;
            }else{//在右边,需要修改低位
                low=mid+1;
            }
        }
        return low;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值