二分查找的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);
} //这是用非递归实现
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; }
相关文章推荐
- 最新springMVC+spring3.1.1+hibernate4.1.0集成及常见问题总结.doc
- Spring实践:面向切面编程(AOP)
- Java 框架思路.doc
- eclipse控制台乱码
- Java缓存组件 EhCache 入门教程
- Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
- JAVA Introspector内省用法
- java乱码问题
- java.lang.ref包源码分析(一):类结构
- Java IO5:序列化与反序列化
- java第五次作业
- Error: could not open `C:\Program Files\Java\jre6\lib\i386\jvm.cfg'
- JAVA——静态成员,剖析main函数机理
- 斐波那契数列问题
- Spring声明式事务配置文件
- 精----Java读取xml文件的四种方法
- Java读取、创建xml(通过dom方式)
- 2、Spring的LocalSessionFactoryBean创建过程源码分析
- Java学习笔记(五)
- java时间戳转换