您的位置:首页 > 编程语言 > Java开发

二分查找的Java实现

2010-08-10 14:26 405 查看
/**
* 二分查找算法
* @param arr 待查找数组
* @param startIndex 起始下标
* @param endIndex 结束下标
* @param value 目标值
* @return 目标值在数组中的位置,如果为-1,则没有找到
*/
private static int bsearch(int[] arr, int startIndex, int endIndex,
int value)
{
// 首先判断几种特殊情况
// 目标值不在起始下标和结束下标的值之间
if (value < arr[startIndex] || arr[endIndex] < value)
{
return -1;
}
// 起始下标和结束下标相差1
if (endIndex - startIndex == 1)
{
int ret = value == arr[startIndex] ? startIndex : -1;
return ret == -1 ? (value == arr[endIndex] ? endIndex : ret) : ret;
}
// 起始下标等于结束下标
if (startIndex == endIndex)
{
if (value == arr[startIndex])
{
return startIndex;
}
return -1;
}
int middleIndex = (startIndex + endIndex) / 2;
// 判断中间值,如果不等于,向两个相反方向查找
if (value == arr[middleIndex])
{
return middleIndex;
}
else if (arr[middleIndex] < value)
{
return bsearch(arr, middleIndex, endIndex, value);
}
else
{
return bsearch(arr, startIndex, middleIndex, value);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: