//数组的查找操作 折半查找
public class ArrayTest4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {2,3,4,5,6};
//int index = getIndex(arr,5);
//System.out.println("index="+index);
//int[] arr1 = {2,4,5,6,7,8};
int index = halfsearch(arr,3);
System.out.println("index="+index);
}
/*折半查找的第二种方法
* */
public static int halfsearch2(int[] arr,int key)
{
int min = 0, max = arr.length-1,mid;
while(min<=max)
{
mid = (min+max)>>1;//一半的意思
if(key>arr[mid])
min = mid +1;
else if (key <arr[mid])
max= mid -1;
else
return mid;
}
return -1;
}
/**
* 折半查找:可以提高效率 但必须保证数组是有序的数组
* min = 0
* max = arr.length-1
* mid = (min+max)/2
* */
public static int halfsearch(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
while(arr[mid]!=key)
{
if(arr[mid]>key)
min = mid+1;
else if(key<arr[mid])
max = mid - 1;
if(min>max)
return -1;
mid = (max + min)/2;
}
return mid;
}
//定义功能 获取key第一次在数组中的位置 如果返回的是-1 那么代表该key在数组中不存在
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)//遍历数组+
{
if(arr[x]==key)//返回的下角标
return x;
}
return -1;//数组角标从零开始 如果没找到返回零 表示没有找到该数
}
}