二分搜索算法是运用分治策略的典型例子。
基本思想:将n个元素分成大致相同的两半,取a[n/2]与x进行比较。如果x==a[n/2],则找到,算法终止。如果a[n/2]>x,则只要在数组的左半部分继续搜索x.如果x>a[n/2],则只要在数组的右半部分继续搜索。
算法简单实现如下:
//二分搜索法
public class BinarySearch
{
/* 采用二分搜索法在一个有序的数组中查找x元素
* 找到x时返回它在数组中位置,否则返回-1
*
*/
public static int binarySearch(int[] arr, int n, int x)
{
//n为数组元素个数,x为要查找元素
int left = 0, right = n - 1;
while (left <= right)
{
int middle = (left + right ) / 2;
if (arr[middle] == x) //找到元素x
{
return middle;
}
if (x > arr[middle])
{
left = middle + 1;
}
else
{
right = middle - 1;
}
}
return -1; //未找到
}
//测试
public static void main(String[] args)
{
int[] arr = {1, 2, 3, 4, 8, 10};
int index = BinarySearch.binarySearch(arr, 6, 1);
if (index == -1)
{
System.out.println("Not find");
}
else
{
System.out.println("Find it: index -> " + index);
}
}
}