java编写递归二分查找法

加零昨晚看了一下二分算法,书上是用C++书写代码,现在我用java来把它翻译过来,改了挺久的Bug终于改好了。

让我们来看一下题目要求:

【输入格式】

输入文件的第一行n,表示有n个元素,第二行是n个已经排好序的数,第三行是key,表示要找的数。

【输出格式】

一个数,即:如果找到数key,则输出其下标,否则输出 "-1";

在这里我们可以使用二分查找法来进行查找(因为数组已经拍好序了),所谓递归二分法:就是不断的将数组平均分成两部分,然后判断要查找的数在左部分还是右部分,接着继续调用下面的search函数。

package xu;                //包
import java.util.Scanner;
public class score1         //类
{
	public static void search(int a[],int key,int low,int high)    //定义方法search
	{
		Scanner s = new Scanner(System.in);
		int mid;
		mid = (low+high)/2;
		if(key==a[mid])                //如果找到了
		{	
			mid = mid + 1;
			System.out.println(mid);	//输出下标
		}
		else if(key<a[mid])            //如果key在左半部分
		{	
			search(a,key,1,mid-1);	
		}
		else if(key>a[mid])				//如果key在右半部分
		{
			search(a,key,mid+1,high);
		}
		else
		{
			System.out.println("-1\n");                    //如果没有这个数,则输出-1
		
		}    
	}
	public static void main(String[] args)             
	{
		int key,n;
		Scanner s = new Scanner(System.in);
		n = s.nextInt();                                 //输入数组长度n
		int a[] = new int[n];
		for(int i=0; i<n;i++)                           //遍历
			a[i] = s.nextInt();			                //输入数列元素
		key = s.nextInt();                              //输入要查找的数
		score1 ss = new score1();                       //创建对象ss
		ss.search(a,key,0,n);                            //调用search方法
	}

}

猜你喜欢

转载自blog.csdn.net/weixin_44074724/article/details/88741195
今日推荐