二分查找while循环和for循环写法

/ 二分法查找

        // 思路,每次都比较中间那个数,但要求数组必须有序
        // 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 千万不能忘了等号,一定要加等于,不然有的数就不能判断了,二分法中间一定有等于,不然执行到中间等于时候就跳出循环了。

你可能感兴趣的:(二分查找while循环和for循环写法)