/**
* 数组的查找
*
*/
public class ThreeDemo {
//获取a第一次出现在数组中的位置,如果返回的是-1,则表示该a在数组中不存在
public static int getIndex(int[] arr,int a) {
for(int x=0;x<arr.length;x++) {
if(arr[x]==a) {
return x;
}
}
return -1;
}
/*
* 折半查找,必须保证数组是有序的
*/
public static int selfSearch(int[] arr,int key) {
//定义三个角标,最小,最大,中间值
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
//如果中间值不等于要查找的元素,就循环
while(arr[mid] != key) {
//如果要查找的元素大于中间值,那么最小角标就向前移动,移动的大小就是中间值加1
if(key > arr[mid]) {
min = mid+1;
}else { //如果要查找的元素小于中间值,那么最大角标就向后移动,移动的大小就是中间值减1
max = mid-1;
}
//如果要查找的元素并不在数组中,也就是最小值大于最大值,返回-1
if(min>max) {
return -1;
}
mid = (min+max)/2;
}
return mid;
}
//折半的第二种方法
public static int helfSearch_2(int[] arr,int key) {
int min = 0,max = arr.length-1,mid;
while(min<=max) {
mid = (min+max)/2;
if(key>arr[mid]) {
min = mid+1;
}else if (key<arr[mid]) {
max = mid-1;
}else {
return mid;
}
}
return -1;
}
public static void main(String[] args) {
int[] arr = {3,2,1,5,4,2,9};
int index = getIndex(arr, 2);
System.out.println(index);
System.out.println("--------------------------");
//折半查找
int[] arrself = {1,3,5,7,9,12,33,56};
//查找7
int selfNum = selfSearch(arrself, 7);
System.out.println(selfNum);
System.out.println("------------------");
//折半查找的第二种方式
int[] arrself_2 = {2,4,6,8,12,14,16};
//查找14
int a = helfSearch_2(arrself_2, 14);
System.out.println(a);
//查找一个不存在的数字99
int b = helfSearch_2(arrself_2, 99);
System.out.println(b);
}
}