如何确定一个元素在数组中的位置?数组里存的全是整数。 1:如果是无序数组,从0开始一个个查找,平均时间复杂度为O(n) 2:如果是有序数组,可以使用二分查找,最坏时间复杂度为O(logn)
实现思路:
假设在[begin,end)范围内搜索元素k,mid == (begin+end)/2,m是mid位置的数值。
- 如果
k<m,则去[begin,mid)范围内再次二分查找 - 如果
k>m,则取[mid+1,end)范围内再次二分查找 - 如果
k=m,直接返回mid
如图:
代码如下:
public static int search(int[] array, int k) {
int begin = 0;
int end = array.length;
while (begin < end) {
int mid = (begin + end) >> 1;
if (k > array[mid]) {
begin = mid + 1;
} else if (k < array[mid]) {
end = mid;
} else {
return mid;
}
}
return -1;
}