package data;
import java.util.Scanner;
public class Data726 {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n,target,i;
n = cin.nextInt();
System.out.print("nums=");
int nums[] = new int[n];
for(i = 0; i < n; i++)
{
nums[i] = cin.nextInt();
}
if(judge(nums,n))
{
System.out.print("target=");
target = cin.nextInt();
if(binarySearch(nums,0,n-1,target) != -1)
{
System.out.println(binarySearch(nums,0,n-1,target));
}
else
{
System.out.println("-1");
}
}
else
System.out.println("-1");
}
public static boolean judge(int[] x, int num) {
int minx = x[0];
boolean flag = true;//标志是否是升序数组;
for (int j = 1; j < num; j++) {
if (x[j] < minx) {
flag = flag;
break;
}
else {
minx = x[j];
}
}
if (flag == false)
return false;
else
return true;
}
public static int binarySearch(int A[], int left, int right, int x) {
int mid; //mid为left和right的中间点
while (left <= right) {
mid = (left + right) / 2;//mid= 0+4(5-1)/2=2
if (A[mid] == x) {//nums[2] = 3!= target=5
return mid + 1;//找到x,返回下标
}
else if (A[mid] > x) //中间数大于x --A[2] = 3 > 2
{
right = mid - 1; //往子区间[left,mid-1]查找--right = 2 -1
}
else//中间数小于x---3<5
{
left = mid + 1; //往子区间[mid+1,right]查找--left= 3+1
}
}
return -1;//查找无target输出-1;
}
}
原文:https://www.cnblogs.com/tmtboke/p/15063518.html