适用场景:数组中存储的值是有序排列存储的
达到目标:传入指定数查找在数组当中的下标:找到返回下标,未找到返回-1
public class Test2 { public static void main(String[] args) { //二分查找 int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; //目标元素 int target = 10; //记录开始位置 int begin = 0; //记录结束位置 int end = arr.length - 1; //记录中间的位置 int mid = (begin + end) / 2; //记录目标位置 int index = -1; //循环查找 while (true) { //判断中间的这个元素是不是要查找的元素 if (arr[mid] == target) { //找到了直接返回 index = mid; break; //中间这个元素不是要查找的元素 } else { //如果开始在结束位置之后或重合,没有这个元素 if(begin == end){ index = -1; break; } //判断中间这个元素是不是比目标元素大 if (arr[mid] > target) { //中间的这个元素比目标元素大 //说明肯定在数组中间的左半部分,因为是大于所以需要修改结束位置-1 end = mid - 1; } else { //中间的这个元素比目标元素小 //说明肯定在数组中间的右半部分,因为是小于所以需要修改起始位置+1 begin = mid + 1; } //取出新的中间位置 mid = (begin + end) / 2; } } System.out.println("index:" + index); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)