搜索
搜索(searching)在这里指的是从数组中找出指定的内容所在的位置,同样的,对于AP,我们只需要理解这几个算法的意义和异同即可~
顺序搜索
顺序搜索(sequential searching)就是把数组从头到尾搜索一遍,直到找到所要找的元素或者搜索完所有元素为止。
以下是顺序搜索在Java里的一种实现:
/***
@param elements an array containing the items to be searched
@param target the item to be found in element.
@return an index of target in elements if foun; -1 otherwise;
***/
public static int sequentialSerach(int[] elements, int target) {
for (int j = 0; j < elements.length; j++)
if (elements[j == target]) //String uses equals()
return j;
return -1;
}
二叉搜索
二叉搜索(binary search)是一种高效率的检索方法。将搜索范围逐渐一步一步二分(分为两部分)减小到只剩下一个。
其思想就是我们查看一个数组中间的内容,如果比我们想要的大,那么我就在左边搜索, 如果比我们想要的小,我们就在右边搜索。然后在缩小后的搜索范围查看判断后数组中间的数,就这样依次进行下去,直到找到结果或者全部搜索完成。不过,利用二进制搜索的数组必须是排列好的,否则比如先排序才行。
/***
@param elements. an array containing the items to be searched.
Precondition: items in elements are sorted in ascending order.
@param target. the item to be found in elements.
@return an index of target in elements if target found; -1 otherwise.
***/
public static int binarySearch(int[] elements, int target) {
int left = 0;
int right = elemetns.length - 1;
while (left <= right) {
int middle = (left + right) / 2;
if (targetr < elements[middle]
right = middle - 1;
else if (target > elements[middle])
left = middle + 1;
else
return middle
}
return -1;
}
小练习
让我们来练习一下我们刚学习的知识吧。
<lab lang="java" parameters="filename=Hello.java">
public class Hello {
public static void main(String[] args) {
// 在这里输入代码
}
}
</lab>