【问题描述】
给定一个按值有序(升序)的N元整数数组A,采用折半查找法查找关键值k的位置,并给出查找的过程
【输入形式】
第一行:N
第二行:A[0], A[1], ... , A[N-1]
第三行:k
【输出形式】
第一行:k的位置(索引),若不存在则输出'no'
第二行:查找的过程,每一次折半的中间(mid)位置的值,以逗号分隔。例如,1 2 3 4 5的中间位置为3,1 2 3 4的中间位置为2。
【样例输入1】
11
2,5,8,11,15,16,22,24,27,35,50
22
【样例输出1】
6
16,27,22
【样例输入2】
11
2,5,8,11,15,16,22,24,27,35,50
10
【样例输出2】
no
16,8,11
import java.util.Scanner;
public class task1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String b = sc.next();
int c = sc.nextInt();
String b1[] = b.split(",");
int low = 0;
int high = b1.length - 1;
String value = "";
String value1 = "no";
while (low <= high) {
int mid;
if ((low + high) % 2 != 0) {
mid = (low + high - 1) / 2;
} else {
mid = (low + high) / 2;
}
if (Integer.parseInt(b1[mid]) == c) {
value1 = "" + mid;
value = value + b1[mid] + ",";
break;
} else if (Integer.parseInt(b1[mid]) > c) {
value = value + b1[mid] + ",";
high = mid - 1;
} else {
value = value + b1[mid] + ",";
low = mid + 1;
}
}
System.out.println(value1);
System.out.println(value.substring(0, value.length() - 1));
}
}