线性查找法&二分查找法

数组的查找:在数组中寻找特定元素的过程。

1、线性查找法
算法思路:线性查找法是将要查找的关键字key与数组中的元素逐个进行比较,
直到列表中找到与关键字匹配的元素,或者查完列表也没有找到。如果匹配成功,返回与关键字匹配的元素在数组中的下标,如果没有找到则返回-1。
适用于小数组或没有排序的数组中查找,执行时间随着数组元素个数的增长而线性增长,因此对大数组效率不高。

代码实现:
public class LinearSearch{

public static int linearSearch(int[] list,int key){
    for(int i=0;i<list.length;i++){
        if(key==list[i])
            return i;
    }
    return -1;
}

}

2、二分查找法
前提:数组元素已经排序
假设数组已按升序排列,二分查找法将关键字与数组的中间元素比较;
(1)如果关键字比中间元素小,那么只需在前一半数组元素中查找。
(2)如果关键字和中间元素相等,则匹配成功,查找结束。
(3)如果关键字比中间元素大,则只需在后一半数组元素中查找。
在一个已经排序的数组中用二分法查找,只需要比较log2n+1次。
如果关键字在数列中,返回其下标。否则返回插入点下标加1的负值。

算法思路:首先让关键字key与数列的中间元素比较,数列的低下标low为0,高下标high为list.length-1。如果key小于list[mid],将high设为mid-1;如果key==list[mid],则匹配成功返回mid。如果key>list[mid]则将low设为mid+1,直到low>high或匹配成功。如果low>high,则返回-1-low,low是插入点。

代码实现:

public class BinarySearch{

    public static int binarySearch(int[] list,int key){
        int low = 0;
        int high = list.length-1;

        while(low<=high){
            int mid = (low+high)/2;

            if(key<list[mid])
                high = mid-1;
            else if(key==list[mid])
                return mid;
            else
                low = mid+1;
        }
        return -low-1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值