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]
    }
}
相关推荐
2401_857439699 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66610 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
李老头探索12 分钟前
Java面试之Java中实现多线程有几种方法
java·开发语言·面试
小沈熬夜秃头中୧⍤⃝12 分钟前
【贪心算法】No.1---贪心算法(1)
算法·贪心算法
芒果披萨17 分钟前
Filter和Listener
java·filter
qq_49244844622 分钟前
Java实现App自动化(Appium Demo)
java
阿华的代码王国30 分钟前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话
木向1 小时前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越1 小时前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法
skaiuijing1 小时前
Sparrow系列拓展篇:对调度层进行抽象并引入IPC机制信号量
c语言·算法·操作系统·调度算法·操作系统内核