首页 > 其他分享 >二分法查找

二分法查找

时间:2022-08-20 15:24:12浏览次数:90  
标签:search return int 二分法 查找 low data

import random


class Search(object):

    def binary_search(self, data, value):
        """
        二分查找迭代法实现
        :param data: list 待查找序列
        :param value: int 待查数据
        :return: int 索引(查找不到返回-1)
        """
        low = 0
        high = len(data) - 1
        while low <= high:
            mid = int((low + high) / 2)
            if value < data[mid]:
                high = mid - 1
            elif value > data[mid]:
                low = mid + 1
            else:
                return mid + 1
        return -1

    def binary_search_recursion(self, data, low, high, value):
        """
        二分查找递归法实现
        :param data: list 待查找序列
        :param low: int low指针
        :param high: int high指针
        :param value: int 待查数据
        :return: int 索引(查找不到返回-1)
        """
        if low <= high:
            mid = int((low + high) / 2)
            if value < data[mid]:
                return self.binary_search_recursion(data, low, mid - 1, value)
            elif value > data[mid]:
                return self.binary_search_recursion(data, mid + 1, high, value)
            else:
                return mid + 1
        return -1


def main():
    search = Search()
    data = [0] * 10
    for index in range(len(data)):
        data[index] = random.randint(1, 10)
    data = sorted(data)
    print("待查找序列:", data)
    res_index = search.binary_search_recursion(data, 0, len(data) - 1, 5)
    print("结果索引为:", res_index)
    res_index = search.binary_search(data, 5)
    print("结果索引为:", res_index)


if __name__ == '__main__':
    main()

标签:search,return,int,二分法,查找,low,data
From: https://www.cnblogs.com/lc6666/p/16607755.html

相关文章

  • win32com:word操作之 通过文字查找段落
      练习:#遍历可以查找出所有包含关键字的段落#去掉遍历只查找到第一个包含关键字的段落fullrange=doc.Range()foriinrange(4):fullrange.Find.Execut......
  • 第6章 数组、排序和查找
    ​6.1 为什么需要数组Array     数组可以存放多个同一类型的数据,数组的数据类型是引用类型。6.2 数组的使用     ​​​​​​​1)使用方式1:动......
  • 二分查找的模板
    二分查找的难度不低:从定义上来看:为什么需要二分查找大神总结:[]:https://leetcode.cn/circle/article/xYBtLt/#迭代版模板......
  • 算法联系---二分查找
       classSolution{public:boolFind(inttarget,vector<vector<int>>array){//因为题目的属性可以知道用右上角的元素判断,如果右上角......
  • 二分法代码笔记
    二分法代码笔记最近复习二分法的题目,发现左右区间的二分写法总是无法第一时间写出正确的,故痛定思痛,通过写笔记的形式记录下来。这里需要说明的是,二分法多用于单调情况下......
  • Linux查找文件内容的常用命令方法。
      Linux查找文件内容的常用命令方法。 从文件内容查找匹配指定字符串的行:$grep"被查找的字符串"文件名例子:在当前目录里第一级文件夹中寻找包含指定字符串的.in......
  • 英语词典2 ,用二分法预查范围,基于文本词典库,unicode,TTS发声,RichEdit显示,Win32 SDK编程
    //MDX2.cpp:Definestheentrypointfortheapplication.////1.改成unicode以支持音标和中文//2.改用词库比较大的21世纪英汉汉英双向词典//3.在之前的基础上......
  • 正则表达式查找邮箱等数据
    相当于一个小工具,记录一下。importjava.util.regex.Matcher;importjava.util.regex.Pattern;//正则表达式实例,查找数据中的邮箱手机号和座机号publicclassRegex......
  • VS编译时提示“无法查找或打开 PDB 文件”的解决方法
     有时候,我们使用VS(VisualStudio)编译程序时会出现“无法查找或打开PDB文件”的提示,并且此时程序会生成失败,无法运行,如下图所示: 大家不要惊慌,出现这种提示并不是代码......
  • 查找所有匹配的字符串
    可以通过循环调用indexOf()来查找所有匹配的字符串,如下面的例子:varstringValue="Helloword!";varposition=newArray();varpos=stringValue.indexOf("o")whi......