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]
    }
}
相关推荐
ch.ju几秒前
Java程序设计(第3版)第二章——表达式和算术运算符
java
发发就是发4 分钟前
顺序锁(Seqlock)与RCU机制:当读写锁遇上性能瓶颈
java·linux·服务器·开发语言·jvm·驱动开发
6Hzlia5 分钟前
【Hot 100 刷题计划】 LeetCode 1143. 最长公共子序列 | C++ 二维DP 与 哨兵技巧
c++·算法·leetcode
我命由我123457 分钟前
Android Jetpack Compose - ModalNavigationDrawer、NavigationRail、PullToRefreshBox
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
Allen_LVyingbo14 分钟前
《狄拉克符号法50讲》习题与解析(下)
算法·决策树·机器学习·健康医疗·量子计算
Byron__14 分钟前
HashSet/LinkedHashSet/TreeSet 原理解析
java
豆沙糕15 分钟前
大模型面试高频题:请详细讲解检索中的BM25算法
人工智能·算法
不才小强15 分钟前
查找算法详解:二分查找
数据结构·算法
君义_noip19 分钟前
信息学奥赛一本通 4164:【GESP2512七级】学习小组 | 洛谷 P14922 [GESP202512 七级] 学习小组
学习·算法·动态规划·gesp·信息学奥赛
MicroTech202519 分钟前
微算法科技(NASDAQ :MLGO)面向区块链的系统的高效反量子晶格盲签名技术
科技·算法·区块链