/ 二分法查找
// 思路,每次都比较中间那个数,但要求数组必须有序
// 1.先创建一个有序的数组
int[] arry = new int[] { 1, 6, 7, 9, 11, 15, 22 };
// 假设去查找11
// 用while来执行更方便
boolean isflag = flase;//用于判断是否找到这个数
int num = 55;
int head = 0;
int end = arry.length - 1;// 记得数组是0开始的,末尾位置的索引是长度减一
while (head <= end) {
int mide = (head + end) / 2;
if (num == arry[mide]) {
System.out.println(mide);
isflag = true;
break;
} else if (num > arry[mide]) {
head = mide + 1;//不加1会陷入死循环,不加1遇到查询数组最后一位时,会陷入死循环
} else {
end = mide - 1;
}
}
if(isflag == false) {
System.out.println("没有找到");
}
用for循环来写二分法排序
'''public class Text {
public static void main(String[] args) {
int[] arry = new int[]{ 1, 6, 7, 9, 11, 15, 22 };
// 假设去查找11
// 设置for循环二分法
// 用for循环写
int num = 11;
boolean isflag = false;
// 用for循环写
for (int head = 0, end =arry.length - 1; head <= end;) {
int mide = (head + end) / 2;
if (num== arry[mide]) {
System.out.println(mide);
isflag = true;
break;
}
else if (num < arry[mide]) {
end = mide - 1;
} else {
head = mide + 1;
}
} if (isflag == false) { System.out.println("没有找到"); }
}
}
注意点 设置循环条件是记得是head <= end 千万不能忘了等号,一定要加等于,不然有的数就不能判断了,二分法中间一定有等于,不然执行到中间等于时候就跳出循环了。