二分法笔记
1、思路
2、代码
import static java.util.Arrays.sort;
public class Dichotomy {
//二分法
public static int a[] = {1, 2, 5, 3, 4, 7, 6};//先设置一个数组
public static void main(String[] args) {
Select(a,6);
}
public static void Select(int[] str,int x){
//1.自己用冒泡排序
// for (int m = 0; m <= a.length - 1; m++) {//冒泡排序先排序,让数组成为有序数组
// for (int n = 0; n < a.length - 1 - m; n++) {
// if (a[n] > a[n + 1]) {
// int p = 0;
// p = a[n + 1];
// a[n + 1] = a[n];
// a[n] = p;
// }
// }
// System.out.print(a[m] + " ");
// }
//2.或者使用数组函数sort()排序
sort(a);//记得导入import static java.util.Arrays.sort;
for (int i :a) {
System.out.print(i+" ");
}
System.out.println('\n');
int minIndex = 0;//最小索引
int maxIndex = a.length-1;//最大索引
int middleIndex = (minIndex + maxIndex) / 2;//中间索引
while (minIndex <= maxIndex) {//遍历数组,如未自动跳出循环则直到最小索引数等于最大索引数
System.out.print("middleIndex: "+middleIndex+" "+" ");//打印出索引变化过程
System.out.print("minIndex:"+minIndex+" "+" ");
System.out.print("maxIndex:"+maxIndex+" "+" ");
System.out.println('\n');
if (x == a[middleIndex]) {//判断查询数是否与中间索引数一致
System.out.print(x+"在"+middleIndex+"处");
return ;
} else if (x < a[middleIndex]) {// 当所查询书小于中间索引数时,最大索引数为中间所应数-1
maxIndex = middleIndex - 1;
} else if (x > a[middleIndex]) {// 当所查询书大于中间索引数时,最小索引数为中间所应数+1
minIndex = middleIndex + 1;
} else {
System.out.println("没有该数");
}
middleIndex = (maxIndex+minIndex)/2;// 如第一次未查询到则重新赋值中间索引。
}
}
}
3、运行结果