通过对无序数组进行遍历,将数组中的每个元素与指定元素比较,从而确定该数组中是否存在指定元素。
字符串数组
public static void main(String[] args) {
String[] arr= {"Megatron","s司马铁锤","Laden","angelbaby","b比尔盖茨","1林平之","BIGBAM"};
String target="s司马铁锤";
int index=-1;
for(int i=0,k=arr.length-1;i
整型数组
public class demo01 {
public static void main(String[] args) {
int[] array= {23,34,45,36,27,38,58,67,78,58,39};
int target=36;//目标元素
int index=-1;//目标元素下标,设置初始下标为-1,代表不存在
//遍历查找
for(int i=0;i
字符数组
public class demo02 {
public static void main(String[] args) {
char[] a= {'a','b','c','d','e','f','g'};
char target='d';//目标元素
int index=-1;//目标元素下标,设置初始下标为-1,代表不存在
//遍历查找
for(int i=0;i
双指针遍历的方式进行查找:通过两个下标,分别从数组头部和尾部,同时对该无序数组进行遍历,将数组中的每个元素与指定元素进行比较,从而确定该数组中是否存在指定元素。
字符串数组
public class demo01 {
public static void main(String[] args) {
String[] array= {"Megatron","s司马铁锤","Laden","angelbaby","b比尔盖茨","1林平之","BIGBAM"};
String target="s司马铁锤";
int index=-1;//目标元素下标,设置初始下标为-1,代表不存在
//双指针查找
for(int i=0,k=array.length-1;i<=k;i++,k--) {
if(array[i].equals(target)) {
index=i;
break;
}
if(array[k].equals(target)) {
index=k;
break;
}
}
System.out.printf("目标元素%s在数组中的下标为%d",target,index);
}
}
整型数组
public class demo01 {
public static void main(String[] args) {
int[] array= {23,34,45,36,27,38,58,67,78,58,39};
int target=36;//目标元素
int index=-1;//目标元素下标,设置初始下标为-1,代表不存在
//双指针查找
for(int i=0,k=array.length-1;i<=k;i++,k--) {
if(array[i]==target) {
index=i;
break;
}
if(array[k]==target) {
index=k;
break;
}
}
System.out.printf("目标元素%d在数组中的下标为%d",target,index);
}
}
字符数组
public class demo02 {
public static void main(String[] args) {
char[] a= {'a','b','c','d','e','f','g'};
char target='d';//目标元素
int index=-1;//目标元素下标,设置初始下标为-1,代表不存在
//双指针查找
for(int i=0,k=a.length-1;i<=k;i++,k--) {
if(a[i]==target) {
index=i;
break;
}
if(a[k]==target) {
index=k;
break;
}
}
System.out.printf("目标元素%s在数组中的下标为%d",target,index);
}
}
通过调用Arrays.binarysearch方法,进行查找:由于该方法是基于二分查找方法实现,数组必须处于有序状态。所以,需要先对数组进行排序,再通过Arrays.binarysearch进行查找。
import java.util.Arrays;
public class e15 {
//查找目标元素
public static void main(String[] args) {
int[] arr= {11,34,23,25,5,6,57};
System.out.println("请输出一个数字");
int target=23;
//先使用Arrays工具类的sort方法排序
Arrays.sort(arr);
//再用Arrays工具类的binarySearch查找
int index=Arrays.binarySearch(arr, target);
System.out.printf("目标元素%d在数组中的下标为%d",target,index);
}
}
二分查找思路分析
4.在新的搜索数组上,重新开始第2步的判断
整型数组
import java.util.Arrays;
public class e15 {
public static void main(String[] args) {
//二分查找
int[] numbers= {3,124,33,12,23,45,34,16,37,48};
int target=12; //目标元素
int index=-1; //初始目标元素下标,-1默认不存在
//对数组进行排序
Arrays.sort(numbers);
System.out.println(Arrays.toString(numbers));//排序后的数组
//定义初始首下表和尾下表
int low=0;int high=numbers.length-1;
while(low<=high) {
int mid=(low+high)/2; //计算中间下标
if(numbers[mid]==target) { //如果中间下标元素等于目标元素,直接退出
index=mid;
break;
}
else if(numbers[mid]target) { //如果中间下标元素大于目标元素,尾元素下标变为中间下标-1
high=mid-1;
index=mid;
}
}
System.out.println("目标元素在数组中的下标位置:"+index);
}
}
字符数组
public class R17 {
public static void main(String[] args) {
char[] a= {'a','b','c','d','e','f','g'};
int low=0;int high=a.length;int index=-1;
int target='e';
while(low<=high) {
int mid= (low+high)/2;
if(a[mid]==target) {
index=mid;
break;
}
else if(a[mid]target) {
high=mid-1;
}
}
System.out.println(index);
}
}
二分查找的效率很高,是因为它在匹配不成功的时候,每次都能排除剩余元素中一半的元素。因此可能包含目标元素的有效范围就收缩的很快,而不像遍历查找那样,每次仅能排除一个元素。