数组:二分法
演示:
public class ErFenFaTest {
public static void main(String[] args) {
int index = search(12);//查找某个值在这个数组中的索引
System.out.println(index);
}
public static int search(int i){
int[] nums = {12,18,20,34,56,78,99};//有序系列
int start = 0;//起始索引
int end = nums.length-1;//结束索引
while (start<= end){
int middle = (start+end)/2;
if (nums[middle]==i){
return middle;
}else if (nums[middle]>i){
end = middle - 1;
}else {
start = middle + 1;
}
}
return -1;//假如如果没有这个值返回-1
}
}
注意事项:
数组必须是有序系列
原理:
假如有一个升序的数组int[]nums,使用二分法,二分法会找到数组最中间的数nums[middle],与
要查找的数值比较大小分为以下三种情况:
1.nums[middle] == i
找到i, 返回middle
2.nums[middle] > i
i在nums[start]至nums[middle-1]之间, 故end = middle-1继续进行循环
3.nums[middle] < i
i在nums[middle+1]至nums[end]之间, start = middle+1继续进行循环