折半查找的效率比一般的效率高
class ArraySelectDemo
{
public static void main(String[] args)
{
//int[] arr = {2,6,4,7,3,8,9,0};
int[] arr = {1,4,6,8,12,45,67,90};
int index1= binarySearch(arr,90);
int index2 = binarySearch2(arr,90);
System.out.println(index1);
System.out.println(index2);
System.out.println(~6);
}
//这个方法叫逐一查找
/*
public static int getIndex(int[] arr,int key)
{
for (int x=1;x<arr.length ;x++ )
{
if (arr[x]==key)
{
return x;
}
}
return -1;
}
*/
//①:折半查找
public static int binarySearch(int[] arr,int key)
{
int min,mid,max;
min = 0;
max = arr.length-1;//取得最大角标
mid = (min+max)/2;
while (arr[mid]!=key)//取得角标,也就相当于把这个数给取出来了,与用户输入的数进行比较
{
if (arr[mid]<key)
{
min = mid + 1;
mid = (min + max)/2;
}
else if (arr[mid]>key)
{
max = mid - 1;
mid = (min + max)/2;
}
if (max < min)
{
return -1;
}
mid = (min + max)/2;
}
return mid;
}
//②:折半查找
public static int binarySearch2(int[] arr,int key)
{
int min,mid,max;
min = 0;
max = arr.length-1;
mid = (min + max)/2;
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;
}
}