题目要求
给定一个数组,首先判断是否有序,如果为无序,将数组变为有序。然后输入目标数字,返回该数字在数组中的的下标
注意
二分查找只适用于有序数组,如果是无序数组,下标mid对应元素之前的下标是正确的,之后元素的下标无法找到
原理图
实现代码
import java.util.Arrays;
import java.util.Scanner;
public class blank42 {
// 在指定数组中寻找 需要寻找的元素
public static int binarySearch(int[] array, int key){
int left = 0;//最小下标
int right = array.length-1;//最大下标
while(left <= right){//如果左>右,则在数组中没有这个数字
int mid = (left+right)/2;//不能定义在循环外面,每次循环结束mid值会改变
if(array[mid] < key){
left = mid+1;
}else if(array[mid] > key){
right = mid-1;
}else{
return mid;//找到返回一个下标(索引)
}
}
return -1;//找不到返回 -1
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] array = {11,66,88,99,44,33,55};
Arrays.sort(array);//将无序数组变为升序数组
System.out.print("请输入你要查找的数字:");
int n = sc.nextInt();
if(binarySearch(array,n)>=0){
System.out.println("该数字在数组中下标为:"+binarySearch(array,n));
}else{
System.out.println("查无此数");
}
}
}
输出结果
请输入你要查找的数字:66
该数字在数组中下标为:4
请输入你要查找的数字:77
查无此数
觉得写的不错的话点个赞呗😊