在前面的文章中我们写过一篇关于二分查找的递归实现(https://blog.csdn.net/lmlzww/article/details/107029360)那么除过递归的实现方式还用一种实现便是我们的非递归实现,非递归二分查找算法的实现主要是通过在方法体中设置标识变量来实现对查询范围的一个缩减。
二分查找的算法的核心就是通过进一步缩减查询的范围来提高算法的效率,所以所不管是通过哪种代码设计模式来实现核心的就是传递、表示查询范围的缩减。
算法代码实现:
public class SearchNoRecursion { public static void main(String[] args) { int arrays[] ={1,3,8,90,234,567,890,1111,4566}; searchNoRecur(arrays,890); } public static void searchNoRecur(int[] arr,int targetValue){ int left = 0; int right = arr.length-1; int middle = (left+right)/2; while (left<=right){ if(arr[middle]==targetValue){ System.out.println("Searching successfully , index is "+middle); return; }else if(arr[middle]<targetValue){ left = middle+1; middle = (left+right)/2; }else if(arr[middle]>targetValue){ right = middle-1; middle = (left+right)/2; } } System.out.println("Sorry,targetValue is not exist in targetArrays"); } }
