美文网首页
分治算法(二分搜索)

分治算法(二分搜索)

作者: 小狐狸与小兔子 | 来源:发表于2020-03-13 23:19 被阅读0次

每日一言 : 当我们真正热爱这世界时,我们才真正生活在这世上。——泰戈尔

二分搜索

什么是二分搜索

二分搜索又叫二分查找,是一种效率较高的查找方法,比如数据库的索引查找方式(哈希索引除外)就是一种二分、三分或者多分查找的算法,分的多少和索引结构有关。

要求线性表为有序表,并且要用向量作为表的存储结构,二分搜索的基本思想是先确定待查找记录所在的范围,然后逐步缩小范围,直到找到or找不到该记录位置。

二分查找的步骤如下

  1. 先确定中间位置:middle=(left+right)/2
  2. 将待查找的key值和data[middle].key值相比较,相等则查找成功并返回该位置,否则重新确定查找空间,继续二分查找,具体方法如下:
    • 如果data[middle].key大于key,由于data为有序线性表,可以知道data[middle->right].key全部都大于key,因此可以推断,若数据表中存在关键字符合的key,那么一定位于【left->middle】子表范围区间内
    • 反之亦然,data[middle].key 小于key,若数据表中存在关键字符合的key,那么一定位于【middle--》right 】子表范围区间内

java 实现如下

    public static void main(String[] args) {
        int [] array = {1,2,3,4,5,6,7,8,9};
        System.out.println(binary(array,0,array.length,5));
    }

    private static int binary(int [] data , int left ,int right ,int key) {
        // 获取中间位置, 一分为二
        int middle = (left + right) / 2;
        // 比较是否相等,相等返回当前位置,否则根据key的大小重新确立新的查找空间
        if (data[middle] == key) {
            return middle;
        }else if (data[middle] > key) {
            return binary(data , left, middle-1 ,key);
        }else {
            return binary(data , middle+1, right ,key);
        }
    }

附图

graph LR
A[有序线性表获取中位数] -- 查找值 --> B{中位数比较查找值}
B --大于or小于--> A
B --等于--> C(返回值)

简单通俗来说就是钱包,我们一般会习惯把钱进行一个整理排序,然后放入钱包中,从小到大依次存放,【1、2、5、10、20、50、100】,当我们买菜花了20,通过比较中位数5,花的钱大于中位,则在中位右侧区间,反之左侧

源码地址Github ,本文源自张建飞《代码精进之路:从码农到工匠》读后记录

相关文章

  • 算法学习

    算法部分 二分搜索 Binary Search 分治 Divide Conquer 宽度优先搜索 Breadth ...

  • 算法汇总

    关于算法: 基础技巧:分治、二分、贪心排序算法:快速排序、归并排序、计数排序搜索算法:回溯、递归、深度优先遍历,广...

  • 算法与数据结构简介

    0x01 算法 基础技巧:分治、二分、贪心 排序算法:快速排序、归并排序、计数排序 搜索算法:回溯、递归、深度优先...

  • 分治算法(二分搜索)

    每日一言 : 当我们真正热爱这世界时,我们才真正生活在这世上。——泰戈尔 二分搜索 什么是二分搜索 二分搜索又叫二...

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

  • algorithm md

    算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...

  • 算法部分

    二分搜索 Binary Search分治 Divide Conquer宽度优先搜索 Breadth First S...

  • 二分算法-LeetCode 69

    二分算法-LeetCode 69 二分算法 二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-...

  • 分治算法总结

    分治法学习总结 分治法是我们经常用到的算法,合理利用分治算法可以使我们更好的解决问题。我们在使用二分查找、归并排序...

  • 算法代码

    递归与分治 二分搜索: 归并排序: 快速排序: 循环赛日程表: 动态规划 矩阵连乘: 最长公共子序列 贪心算法 活...

网友评论

      本文标题:分治算法(二分搜索)

      本文链接:https://www.haomeiwen.com/subject/ilyushtx.html