题目,给定一个数组,要求查找出对应30所对应的索引
1.利用静态创建数组方式创建数组数字如下{30, 20, 2, 4, 50, 99, 12, 87, 52}
2.查找30对应的索引位置
3.输出打印找到的索引位置
解题思路:
1.假设给定的数列是有序的
2.从数列中查找中间元素,并保存
3.拿目标元素和中间元素进行比较
4.如果目标元素大于中间元素,则去中间元素的右边查找
5.如果目标元素小于中间元素,则去中间元素的左边查找
6.重复执行步骤3,采用递归的思想
public static void main(String[] args){
int[] num = {30, 20, 2, 4, 50, 99, 12, 87, 52};
Arrays.sort(num);
int data = 30;
int index = find(num, data, 0, num.length);
System.out.println("数字"+data+"索引是"+index);
}
/**
* 实现二分查找数字,采用递归实现
* @param arr 源数组
* @param data 要查找的数据
* @param left 最左方索引
* @param right 最右方索引
* @return 返回要查找的值的索引
*/
public static int find(int[] arr, int data, int left, int right) {
//保证未到最后一位
while (left <= right) {
//分半查找
int index = (left + right) / 2;
//如果要查找的数字等于当前数字,返回当前坐标
if (data == arr[index]) {
return index;
} else if (data < arr[index]) {
//查找的数字小于当前数字,那么证明范围在当前数字左方
return find(arr, data, left, index-1);
}
//查找的数字大于当前数字,证明范围在分半的右方
return find(arr, data, index+1, right);
}
//未找到返回-1
return -1;
}
如有我未发现的bug,望各位大佬指出,感谢感谢,制作不易,望支持🤞🤞