import java.util.Arrays;
public class ArraySearch {
public static void main(String[] args) {
int[] array = {1,5,7,8,4};
//找出元素8的下标
//第一种方式,一个个挨着找
int index = arraySearch(array,8);
System.out.println(index == -1 ? "元素不存在" : "元素下标是:" + index);
//第二种方式二分法查找,效率较高
//二分法是建立在排序的基础之上的
//先使用Array工具类对数据进行排序
Arrays.sort(array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + " ");
}
System.out.println();
int index1 = challengeBinarySearch(array,8);
System.out.println(index1 == -1 ? "元素不存在" : "元素下标是:" + index1);
//也可以直接使用Arrays工具类中binarySearch方法直接查找
int index2 = Arrays.binarySearch(array,5);
System.out.println(index2 == -1 ? "元素不存在" : "元素下标是:" + index2);
}
/**
* 从数组中检索某个元素的下标
* @param array 被检索的数组
* @param i 被检索的元素
* @return 大于等于0表示被检索元素的下标,-1表示元素不存在
*/
private static int challengeBinarySearch(int[] array, int i) {
//开始下标
int begin = 0;
//结束下标
int end = array.length - 1;
while (begin <= end){
//中间元素下标
int mid = (begin + end) / 2;
if(array[mid] == i){
return mid;
}else if(array[mid] < i){
//目标在中间元素的右边
begin = mid + 1;//增
}else {
//目标在中间元素的左边
end = mid - 1;//减
}
}
return -1;
}
/**
* 从数组中检索某个元素的下标
* @param array 被检索的数组
* @param a 被检索的元素
* @return 大于等于0表示被检索元素的下标,-1表示元素不存在
*/
public static int arraySearch(int[] array, int a) {
for (int i = 0; i < array.length; i++) {
if(array[i] == a){
return i;
}
}
return -1;
}
}
运行结果:
元素下标是:3
1 4 5 7 8
元素下标是:4
元素下标是:2