黑马程序员技术交流社区
标题:
折半查找法,数组基本操作之一
[打印本页]
作者:
ZZBY
时间:
2015-9-12 01:02
标题:
折半查找法,数组基本操作之一
折半查找也叫二分法查找,即对数组二分取中间值和key比较key如果大于中间值,那么key一定在大的那一半,再对这一半进行二分,如此下去
它的特点是很快速高效率
缺点是要求数组是有序的
面试的时候会考到一种相关题型,即让你把一个数插入到一个有序的数组中,并且保证数组还是有序的。
下面是折半查找代码
/*
折半查找
*/
class ArrayTest02
{
public static void main(String[] args)
{
/*
int[] arr = {3,1,5,4,7,9};
int index = getIndex(arr,7);
System.out.println("index = "+index);
*/
int[] arr = {2,4,7,9,11,35,56};
int index = halfSearch_2(arr,5);
System.out.println("index = "+index);
}
//折半查找:可以提高效率。
//前提条件:该数组是有序的从大到小或者从小到大。
public static int halfSearch(int[] arr, int key)
{
int min,mid,max;
min = 0;
max = arr.length-1;
mid = (min+max)/2;
while(key!=arr[mid])
{
if (key>arr[mid])
min = mid+1;
else if (key<arr[mid])
max = mid-1;
if (max < min)
return -1;
mid = (min + max)/2;
}
return mid;
}
//折半查找的第二种方式。
public static int halfSearch_2(int[] arr, int key)
{
int min,mid,max;
min = 0;
max = arr.length-1;
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;
}
//定义一个遍历查找数组中任意元素的方法。
//获取key第一次出现在数组中的位置。
//如果返回值为-1,证明该key在数组中不存在。
public static int getIndex(int[] arr, int key)
{
for (int x=0; x<arr.length; x++)
{
if (key == arr[x])
return x;
}
return -1;
}
}
复制代码
作者:
许庭洲
时间:
2015-9-14 22:37
值得学习ing!
作者:
王志志志
时间:
2015-9-14 22:52
写个快速查找算法试试
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2