加零昨晚看了一下二分算法,书上是用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方法
}
}