二分法查询

发布时间 2023-07-03 22:48:16作者: 闻籁雪

二分法笔记

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、运行结果