Java算法(十二):【数据结构与算法】 十大排序 之 二分查法 && 二分查法实现详细流程图分析 && 实现源码实例

二分查找

二分查找

  • 二分查找就是返回有序序列中,需要查找的元素索引,无则-1。
复制代码
    需求:二分查找:手写实现数组元素的查找,存在返回索引,无则返回 -1;
复制代码
        实现思路:(前提是有序的序列)
                1、 如果不是有序的数组,我们先排序(选择、冒泡)任意;
                2、 创建三个指针,分别为:第一个元素指针和最后一个指针以及中间元素的指针
                3、 确保条件成立(min < max),方可继续执行查找,否则没有
                4、 判断是否相等,相等返回索引,否则返回 -
4.1 代码示例 (这里采用乱序数组)
java 复制代码
public class DichotomyFind {
    public static void main(String[] LiuJinTao) {
        
        // 创建一个数组,很明显,这我故意设置为乱序的,目的是为了复习排序
        int [] arr = {11, 33, 55, 22, 44, 99, 77, 66, 88, 100};
        // 这里为了清晰明了,这里我使用方法来进行封装
        /**
         *  数组排序
         */
        SelectSortHandle(arr);
        /**
         *  二分查找
         */
        int result = DichotomyFindHandle(arr, 100);
        System.out.println(result);
        

    }
    
    
    /**
     * 二分查找
     * @param arr
     * @param element
     * @return
     */
    private static int DichotomyFindHandle(int [] arr, int element) {
        // 2. 创建指针
        int min = 0;
        int max = arr.length - 1;
        int mid;
        // 3. 根据条件是否成立,决定是否查找
        while (min <= max) {
            mid = (min + max) / 2;
            // 4. 判断是否相等,注意的是记得调整min和max的指针位置
            if (element < arr[mid]) {
                max = mid - 1;
            } else if (element > arr[mid]) {
                min = mid + 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
    
    
    /**
     * 选择排序数组
     * @param arr
     */
    private static void SelectSortHandle(int[] arr) {
        // 1. 二分查找前提处理
        for (int i = 0; i < arr.length - 1; i++) {
            // 这里选择排序
            for (int j = i + 1; j < arr.length; j++) {
                // 下标为 0 开始,向后面元素进行判断比较。
                if (arr[i] > arr[j]) {
                    // 当前面的元素大于后面的元素,就交换位置,然后从下标 1 开始,以此类推
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        // 查看排序结果 → 将 int 数组 格式化为 String类型输出
        System.out.println(Arrays.toString(arr)); //[11, 22, 33, 44, 55, 66, 77, 88, 99]
    }
}
相关推荐
皮皮林5518 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河8 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化
地平线开发者9 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮9 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者10 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考10 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
桦说编程11 小时前
从 ForkJoinPool 的 Compensate 看并发框架的线程补偿思想
java·后端·源码阅读
躺平大鹅13 小时前
Java面向对象入门(类与对象,新手秒懂)
java
HXhlx13 小时前
CART决策树基本原理
算法·机器学习