二分查找算法

package com.xhm.sjjg;

/**
 * 二分查找算法,是一种查询效率比较高的算法 O(logN)
 * 算法描述:
 * 给定一整数i和一个整数数组ary,ary要求预先排好序,
 * 找出i在ary中的下标位置,没找到则返回-1.
 *
 * 需注意:
 * 1、数组必须是有序的,相应数组的插入/删除操作较困难
 * 2、此种查找方式一般适用于不经常变动而查找频繁的有序列表
 */
public class BinaryChopTest
{

    public static final int NOT_FIND = -1;

    /**
     * 算法说明:
     * 1、将数组中间的值与i进行比较,如果相等,则查找成功,返回中间值的下标。
     * 2、如果不等则存在大于或等于两种情况,ary数组也被分为前后两部分。
     * 3、小于i,则将后面部分继续从1执行
     * 4、大于i,则将前面部分继续从1执行
     */
    public static int find(int[] ary, int i)
    {
        int index = 0;
        int low = 0;
        int height = ary.length - 1;

        while (low <= height)
        {
            index = (low + height) / 2;
            if (i > ary[index])
            {
                low = index + 1;
            } else if (i < ary[index])
            {
                height = index - 1;
            } else
            {
                return index;
            }
        }

        return NOT_FIND;
    }

    public static void main(String[] args)
    {
        int[] ary = {2,5,7,9,12,14,15,17,18,23,25};
       
        int index = BinaryChopTest.find(ary, 14);
       
        System.out.println("index = " + index);
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值