/*
递归实现二分法的进化
*/
import java.util.Scanner;
public class RecursionNext2{
public static void main(String[]args)
{
//接收一个要寻找的数
System.out.println("请输入:");
Scanner sc=new Scanner(System.in);
int num = sc.nextInt();
int []a={1,2,3,4,5,6,7,8,9};
int front = 0;
int end=a.length-1;
int index=findArray(a,front,end,num);
System.out.println(index);
}
//递归实现二分法
public static int findArray(int []b,int front,int end,int num)
{
int index=-1;
int mid = (front+end)/2;
if(b==null)
{
return index;
}
if(front<=end){
if(b[mid]==num)
{
return mid;
}
else if(b[mid]<num)
{
return findArray(b,mid+1,end,num);
}
else if(b[mid]>num)
{
return findArray(b,front,mid-1,num);
}
}
return -1;
}
}
分析此程序:
首先二分法:
/*
二分法
*/
import java.util.Scanner;
public class bisection{
public static void main(String[]args)
{
int []a={1,2,3,4,5,6,7,8};
Scanner sc=new Scanner(System.in);
System.out.println("请输入你要找的数字");
int num=sc.nextInt();
//调用searchArray()寻找num
int index=searchArray(a,num);
System.out.println(index);
}
//二分法
public static int searchArray(int[]a,int num)
{
int front = 0;
int end=a.length-1;
int count =0;
//判断数组是否为空
if(a==null)
{
return -1;
}
while(front<=end)
{
int mid=(front+end)/2;
System.out.println("第"+(++count)+"次");
if(a[mid]==num)
{
return mid;
}
else if(a[mid]<num)
{
front=mid+1;
}
else if(a[mid]>num)
{
end=mid-1;
}
}
return -1;
}
}
递归实际就是实现了循环的作用!
//判断数组是否为空
if(a==null)
{
return -1;
}
第二限制循环的条件
保证front<=end,只有在这个前提下找的的位置才保证是在数组内部寻找
然后再去判断a[mid]是否等于num,若a[mid]<num说明num在数组的mid位置到end之间,所以将front=mid+1(因为你已经判断过mid位置上的数),当a[mid]>num相同原理....二分法是用front 和end来限制,让a[mid]去比较。
while(front<=end)
{
int mid=(front+end)/2;
System.out.println("第"+(++count)+"次");
if(a[mid]==num)
{
return mid;
}
else if(a[mid]<num)
{
front=mid+1;
}
else if(a[mid]>num)
{
end=mid-1;
}
}
转载于:https://blog.51cto.com/11900208/1866008