- 必须是1个有序的数组
- 第1次推导
public class test {
public static void main(String[] args) {
int[] ints = {1,2,3,5,7,9};
int a = 6; // 要查找的数
int i=0; //起始位置
int j=ints.length-1; // 结束位置
int m; // 中间位置
// 第1次查找
//[1][2][3][5][7][9]
// i m j
if(i<=j){
m = (i+j)/2; // 2
if(ints[m] < a){
i = m + 1; // 3
} else if (ints[m] > a){
j = m -1;
} else {
System.out.println("要查找的数的索引是" + m);
}
} // i=3,j=5
// 第2次查找
//[1][2][3][5][7][9]
// i m j
if(i<=j){
m = (i+j)/2; // 4
if(ints[m] < a){
i = m + 1;
} else if (ints[m] > a){
j = m -1; // 3
} else {
System.out.println("要查找的数的索引是" + m);
}
} // i=3,j=3
// 第3次查找
//[1][2][3][5][7][9]
// i|j
if(i<=j){
m = (i+j)/2; // 3
if(ints[m] < a){
i = m + 1; // 4
} else if (ints[m] > a){
j = m -1;
} else {
System.out.println("要查找的数的索引是" + m);
}
} // i=4,j=3
// 数组中没有要查找的数的情况
if(i>j){
System.out.println("数组中没有要查找的数");
}
}
}
- 最终完善
public class test {
public static void main(String[] args) {
int[] ints = {1,2,3,5,7,9};
int a = 6; // 如果传入0或10则会报错
Find(a, ints);
}
public static int Find(int a, int[] ints){
int i=0; //起始位置
int j=ints.length-1; // 结束位置
int m; // 中间位置
while (i<=j){
m = (i+j)/2;
if(ints[m] < a){
i = m + 1;
} else if (ints[m] > a){
j = m -1;
} else {
System.out.println("要查找的数的索引是" + m);
break;
}
}
if(i>j){
System.out.println("数组中没有要查找的数");
}
return -1;
}
}
标签:二分,int,System,查找,ints,println,out
From: https://www.cnblogs.com/dogleftover/p/17736983.html