线性查找法&二分查找法

来源:互联网 发布:软件的缺陷等级 编辑:程序博客网 时间:2024/06/05 05:09

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

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;    }}
0 0