文章目录
题干
提示:这段是题干,仔细阅读仔细分析:
二分法查找操作:
使用二分法查找有序数组中元素。
找到返回索引,不存在输出-1。
一、题目分析
1.定义数组,用于后续在数组中查找元素
2.对数组进行排序
必须是有序数组才能用二分法查找
3.定义方法
4.调用方法,打印输出
二、代码
1.代码块
代码如下(示例):
package com.jiruan.arraywork05;
import java.lang.reflect.Array;
import java.util.Arrays;
/*二分法查找操作:
使用二分法查找有序数组中元素。
找到返回索引,不存在输出-1。*/
public class Work5 {
/*程序主入口*/
public static void main(String[] args) {
/*声明一个数组,存放了这些元素(无序的)*/
int[] array = new int[]{55, 96, 45, 62, 31, 12, 2, 7, 8, 13, 14, 28, 9, 99, 0, 1};
/*冒泡排序,把无序数组变为有序,有序数组才能用二分法查找*/
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] < array[j]) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
/*调用下面binarySearch静态方法,打印输出*/
Work5 w = new Work5();
System.out.println(w.binarySearch(array, 999));
/*打印输出数组,方便对照检查,可以没有这行*/
System.out.println(Arrays.toString(array));
}
/*定义方法,方法用于二分法查找数组里是否有这个元素*/
/*方法传入数组和一个目标值*/
public int binarySearch(int[] array, int target) {
/*定义左边界,*/
/*起始左边界应该是数组第一个元素,索引是0*/
int l = 0;
/*定义右边界,起始右边界应该是数组最后一个元素*/
/*最后一个元素索引为长度-1*/
int r = array.length - 1;
/*循环查找元素是否在数组中*/
while (l <= r) {
/*判断数组如果是空,或者长度为0,则肯定不在数组中*/
/*方法返回-1,表示不在数组中*/
if (array == null || array.length == 0) {
return -1;
}
/*定义中间边界,中间边界是左右边界除2*/
int mid = (l + r) / 2;
/*如果目标元素正好是中间边界,则找到了*/
/*返回这个值对应的索引,就是要找的元素在数组中的位置*/
if (array[mid] == target) {
return mid;
} else if (array[mid] > target) {
/*如果中间边界大于要找的那个数,说明要找的数在数组左半部分
把右边界放到中间,再在左半部分找元素*/
r = mid - 1;
} else {
/*如果中间边界小于要找的那个数,说明要找的数在数组右半部分
把左边界放到中间,再在左半部分找元素*/
l = mid + 1;
}
}//一直循环,如果找到了就返回值了,不会向下运行
return -1;//没找到,代码走到这行,就返回-1提示没找到
}
}
2.一图流
总结
这是一道数组练习题,本文是我的个人理解,希望对你也能有所帮助!
标签:int,元素,二分法,查找,数组,array From: https://blog.csdn.net/weixin_51722918/article/details/136857056