二分查找(java实现)指定key值,如果存在则返回数组下标,不存在则返回-1。
public class BinarySearch
{
public static void main(String[] args)
{
int[] arr = new int[]
{ 1, 2, 4, 6, 7, 8, 9, 10 };
BinarySearch bs = new BinarySearch();
int pos = bs.recursionSearch(arr, 0, arr.length - 1, 6);
System.out.println("pos1:" + pos);
int pos2 = bs.loopSearch(arr, 6);
System.out.println("pos2:" + pos2);
}
/**
* 递归二分查找
*
* @param array
* @param start
* @param end
* @param key
* @return
*/
public int recursionSearch(int[] array, int start, int end, int key)
{
if (start > end)
{
return -1;
} else
{
int mid = (start + end) / 2;
int midKey = array[mid];
if (midKey == key)
{
return mid;
} else if (midKey > key)
{
return recursionSearch(array, start, mid - 1, key);
} else if (midKey < key)
{
return recursionSearch(array, mid + 1, end, key);
} else
{
return -1;
}
}
}
/**
* 循环折半查找
*
* @param array
* @param key
* @return
*/
public int loopSearch(int[] array, int key)
{
int start = 0;
int end = array.length - 1;// 防止数组下标越界
while (start <= end)
{
int mid = (start + end) / 2;
int midKey = array[mid];
if (midKey == key)
{
return mid;
} else if (midKey > key)
{
end = mid - 1;
} else if (midKey < key)
{
start = mid + 1;
}
}
return -1;
}
}