题目描述
输入整数n(n>0&&n<=100),表示数组的长度 输入n个正整数(递增),作为数组元素 输入1个正整数,作为要查找的元素 输出:利用二分查找输出要查找的元素在数组中的下标位置,若没有这个数则输出no 二分查找: 又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
输入描述
整数n + n个正整数 + 1个待查找整数 5 1 3 7 9 12 12 数组长度5 元素为{1,3,7,9,12},查找12
输出描述
找到该元素则输出元素下标,找不到则输出no
输入样例
5 1 3 7 9 12 12
7 2 3 8 9 12 12 15 12
4 1 2 3 5 7
输出样例
4
5
no
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner A = new Scanner(System.in);
int a,in,out;
a = A.nextInt();
if(a<0||a>100)
System.out.println("no");
else
{
int[] number = new int[a];
for (int i = 0; i < a; i++)
number[i] = A.nextInt();//输入数组
in = A.nextInt();//输入查找的数
out = Find(number, in);
if (out != -1)
System.out.println(out);
else
System.out.println("no");
}
}
public static int Find(int[] num, int target) {
int low = 0, high = num.length - 1;
int mid = low + (high - low) / 2;
int i;
for( i =0;i< num.length+1;i++)
{
mid = low + (high - low) / 2;
if(mid>= num.length)
return -1;
if(target == num[mid])
break;
if(target<num[mid])
high = mid-1;
if(target>num[mid])
low = mid+1;
}
if(i==num.length+1)
return -1;
else
return mid;
}
}