private static int search(int left, int right, int x) {
if (left > right)
return -1;
int middle = (left + right) / 2;// 求得数组中间元素
if (x == array[middle])
return middle;
else if (x < array[middle])
return search(left, middle - 1, x);
else
return search(middle + 1, right, x);
}
}
复制代码
作者: meng12 时间: 2015-6-8 13:06
/*
要进行折半查找,必须先保证数组是有序的
*/
class Test
{
public static void main(String[] args)
{
int[] arr = {1,2,3,7,12,15};//定义一个有序数组
int index = binarySeek(arr,7);
System.out.println("index="+index);
}
public static int binarySeek(int[] arr, int key)
{
int max,min,mid;//定义两个变量代表数组的最大角标,中间角标和最小角标
max = arr.length-1;
min = 0;
for (int x=0; x<arr.length; x++)//使用for循环遍历数组,获取里面的元素
{
mid = (max+min)>>1;//相当于(max+min)/2;
if(arr[mid]>key)//如果要查找的值比中间角标对应的值要小,
max = mid - 1;//就把中间角标向左移一位在赋值给max
else if(arr[mid]<key)
{
min = mid + 1;
}else
return mid;//如果要查找的键值的角等于mid,则返回mid
}
return -1;//如果要查找的值不存在,则返回-1;
}
}作者: Smile小思 时间: 2015-6-8 16:06
/*
折半查找。提高效率,但是必须要保证该数组是有序的数组。
*/
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(min>max)
return -1;
mid = (max+min)/2;
}
return mid;
}
/*
折半的第二种方式。
*/
public static int halfSearch_2(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;