二分法查找升序和降序集合

本文介绍了二分法查找在处理升序和降序列表或数组中的应用。系统默认方法适用于升序数据,返回值大于0表示找到目标,小于0表示未找到,并可通过取反确定插入位置。内容涵盖了二分查找在数据增删改操作中的具体实现。

二分法查找list并进行数据的增删改
系统提供的方法是对升序list或数组进行查找
返回的值>0则代表找到,小于0表示没有找到
如果小于0 那么取反则是数据需要插入的位置
list和数组的查找系统提供的方法为 :

Collections.binarySearch()    
ContainerHelpers.binarySearch()  

public class Test {
    /**
    * 对降序list进行查找
    */
    private static <T>
    int indexedBinarySearch(List<? extends Comparable<? super T>> list, T key) {
        int low = 0;
        int high = list.size()-1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            Comparable<? super T> midVal = list.get(mid);
            int cmp = midVal.compareTo(key);

            if (cmp < 0)
                high = mid - 1;
            else if (cmp > 0)
                low = mid + 1;
            else
                return mid; // key found
        }
        return -(low + 1);  // key not found
    }

  public static void test() {
        ArrayList<Double> arrayList = new ArrayList<>();
        arrayList.add(1.2);
        arrayList.add(1.4);
        arrayList.add(1.5);
        arrayList.add(1.62);
        arrayList.add(1.91);
        arrayList.add(6.23);
        arrayList.add(12.12);
        Log.d("lpf", "5.8 : " + Collections.binarySearch(arrayList, 5.8));
        Log.d("lpf", "6.23 : " + Collections.binarySearch(arrayList, 6.23));
        Log.d("lpf", "13 : " + Collections.binarySearch(arrayList, 13.00));

        Log.d("lpf", "------------------------");
        ArrayList<Double>  list = new ArrayList<>();
        list.add(12.12);
        list.add(6.23);
        list.add(1.91);
        list.add(1.62);
        list.add(1.5);
        list.add(1.4);
        list.add(1.2);
        Log.d("lpf", "5.8 : " + indexedBinarySearch(list, 5.8));
        Log.d("lpf", "6.23 : " + indexedBinarySearch(list, 6.23));
        Log.d("lpf", "13 : " + indexedBinarySearch(list, 13.00));
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值