注意:
- 二分法必须用于有顺序的数组。
练习:
需求1:定义一个函数,接收一个数组对象和一个要查找的目标元素,函数要返回该目标元素在数组中的索引值,如果目标元素不存在数组中,那么返回-1表示。
class Demo{
public static void main(String[] args){
int[] arr = {12,16,19,23,54};
//int index = searchEle(arr,23);
int index = halfSearch(arr,23);
System.out.println("元素所在的索引值是:"+index);
}
public static int halfSearch(int[] arr,int target){
//定义三个变量,分别记录最大、最小、中间 的查找范围索引值
int max = arr.length - 1;
int min = 0;
int mid = (max+min)/2;
while(true){
if(target>arr[mid]){
min = mid + 1;
}else if(target<arr[mid]){
max = mid - 1;
}else{
//找到了元素
return mid;
}
if(max<min){
//没有找到的情况
return -1;
}
//重新计算中间索引值
mid = (max+min)/2;
}
}
public static int searchEle(int[] arr,int target){
for(int i = 0;i<arr.length;i++){
if(arr[i]==target){
return i;
}
}
return -1;
}
}
原理分析:
需求2:定义一个函数,接收一个char类型的数组对象,然后翻转数组中的元素
二分法查找:如果能在数组中找到对应的元素,那么就返回该数据的索引值,如果没有找到那么就返回一个负数表示。
- 关键点:
toString();
排序(sort)
找元素在数组中的位置(二分查找法) birarySearch
数组的工具类(Arrays)
adsd是的方式的
import java.util.*;
class Demo{
public static void main(String[] args){
int[] arr = {12,3,1,10,8};
//排序的方法
Arrays.sort(arr);
String info = Arrays.toString(arr);
System.out.println("数组的元素:"+info);//1,3,8,10,12
int index = Arrays.binarySearch(arr,9);//二分查找法:如果能在数组中找到对应的元素,那么就返回该数据的索引值,如果没有找到那么就返回一个负数表示。(返回的负数是比9大一个值的10的负索引值-1,即-3-1=-4)
System.out.println("找到的索引值:"+index);
}
}