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

二分查找的java实现

2016-04-15 20:42 387 查看
在看《编程之美》的时候,发现其中有一节特意强调了代码的鲁棒性,也就是各种边界情况需要考虑,所以特意讲到了关于二分排序的题目,那么如何能够实现用递归和非递归两种方式,并且能够实现代码的完整性,也就是各种情况都考虑,那么我用java实现了这两种情况。

public int binarysearch(int[] array,int start,int end,int k)
{
if(start > end) //判断递归结束的边界条件
return -1;
if(k > array[end] || k < array[start])
return -1; //优先考虑如果这个数比开头的那个数还要小或者比最大值还要大,那么直接返回-1,表明在这个排序序列中找不到
int mid = start + (end - start) / 2;
if(array[mid] == k)
return mid;
if(array[mid] < k)
return binarysearch(array,mid + 1,end,k);
else
return binarysearch(array,start,mid - 1,k);
} //这是用非递归实现
递归实现:
<pre class="java" name="code">public int binarySearch(int[] array,int k)   //递归
{
int low = 0;
int high = array.length;
while(low <= high)
{
int mid = low + (high - low) / 2;
if(k == array[mid])
return mid;
else if(k > array[mid])
{
low = mid + 1;
}
else if(k < array[mid])
high = mid - 1;
}
return -1;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: