/**
* 简单遍历查找方式:查找数组中制定元素所在的角标
*/
public static void main(String[] args) {
// 定义一个整形数组
int [] arr = new int []{2,1,5,7,9,8};//也可以直接定义{2,1,5,7,9,8}
//定义一个整形变形接受返回值
int index = getIndex(arr,7);
//输出返回值
System.out.println(index);
}
//定义一个功能
private static int getIndex(int[] arr, int key) {
//遍历数组
for (int j = 0; j < arr.length; j++) {
if (arr[j]==key) {
//如果找到返回叫角标值
return j;
}
}
//如果没找到返回-1
return -1;
}
}
二分查找
package com.review.demo;
public class BinarySearchDemo {
/**
* 需求:使用二分查找数组中指定元素所在的角标
* 思路:
* 1,定三个变量min,max,mid分别表示数组的数组最小、最大和中间角标
* 2,循环遍历数组,通过比较数组的中间角标元素和要查找的key,来更改min或max:具体如下
* 1,当数组arr[mid]>key,令max= mid-1;再返回上步骤循环
* 2,当数组arr[mid]<key,令min=mid+1,再返回上步骤循环
* 3,当循环遍历没有找到要查找的元素,条件是:min>max,此时就返回-1
* 4,最后循环一次更改一次mid的值,mid=(min+max)/2
*
*/
public static void main(String[] args) {
// 定义一个Int类型的有序数组
int [] arr = {2,3,5,7,9,10,23};
//定义一个方法
int index = BinarySearch(arr,21);
//输出index
System.out.println(index);
}
private static int BinarySearch(int[] arr, int key) {
// 定义三个变量
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min+max)>>1;
while (arr[mid]!=key) {
if (arr[mid]>key) {
max =mid-1;
}else if (arr[mid]<key) {
min = mid +1;
}
//如果不存在就返回-1
if (min>max) {
return -1;
}
mid = (min+max)/2;
}
//元素存在就返回该元素所在的角标值
return mid;
}
}