二分查找
二分查找适用场景:有序集合
二分查找核心思想:先找出中间的那一个,如果和要找的元素相等,直接返回,如果大于,那就找后面的一半,开始位置改变为中间位置下标的后一个元素,如果小于,那就找前一半,结束位置改变为中间位置下标的前一个
核心示例代码:
public int getIndex(List<Integer> list,Integer item){
// 如果集合或要查找的数据为空,直接返回-1
if(null == list || list.isEmpty() || null == item){
return -1;
}
// 取中间的下标
int i = list.size()/2;
// 开始位置
int startIndex = 0;
// 结束位置
int endIndex = list.size()-1;
while (true){
// 如果中间的下标小于0,或者大于等于集合的长度,说明不存在,直接返回-1
if(i < 0 || i>=list.size()){
return -1;
}
// 如果中间的位置和要找的元素相等,返回对应的下标
if(list.get(i).equals(item)){
return i;
}else{ // 如果中间的位置不是要找的元素
if(list.get(i)>item){
// 结束位置移动到中间位置的前一个
endIndex = i-1;
}else { // 开始位置移动到中间位置的后一个
startIndex = i+1;
}
// 重新计算中间位置
i = (startIndex+endIndex)/2;
}
}
}

浙公网安备 33010602011771号