Python算法之实现二分法查找(递归方式)

算法之二分法查找

  • 前言
    • 学习算法?
  • 什么是二分法查找?
  • python实现二分法

前言

在接触算法之前,对算法一直是敬而远之的态度,每每提到什么排序算法,数据结构什么的就很害怕,在进行一番心里搏斗之后,发现其实也就这样,一本好的算法书(算法第四版),让感受到算法的魅力,全书以java语言实现,会不会编程语言都可以靠这本书学习算法思维和算法的优点,java只是用作简单的算法实现工具,并没有太多的使用到java本身语言的特性,如果你会编程,你只需要一点点的语法知识,便很简单的理解它,没有也不要紧,前书有基础章节可以让你更好的了解java语言。

本文仅以学习算法为目标,将持续不断更新算法相关文章。

只是因为我看书学习后,惊人的发现我可以盲打算法,我真的非常高兴,高兴的是挑战了自己

学习算法?

当你使用计算机语言进行编程的时候,你需要遍历数组操作时候是不是直接for循环?

当然,我也会进行for循环,因为我这样的python工程师从来没有考虑过一个数组有多大。
我学习java过程中发现python简洁的语法,也让它有很多的隐患和缺陷,当然我们不需要去评判一门语言的好坏,我只是表达自己在使用java创建数组的时候,需要声明数组大小,对比下来发现的一些问题。

废话太多啦

什么是二分法查找?

查找的时候可以减少比对数据的数量,加快查找速度,但只适用于排序数据,对数据排序本身又会消耗时间性能;

python实现二分法

def er_find(find_num, ordered_list):
    if len(ordered_list) > 0:
        print(ordered_list)
        heig = len(ordered_list) - 1  
        # 求出下列列表的总长
        mid_values = heig // 2  
        # 获取中位数数据
        if heig >= 0:  
        # 判断是否可以循环查找状态
            if find_num == ordered_list[mid_values]:  
            # 如过查找的数据为中位数数据直接找到的情况
                return True
            elif find_num > ordered_list[mid_values]:  
            # 如果查找数据大于排序的中位数,向后找数据
                return er_find(find_num, ordered_list[mid_values + 1:])  
                # 查找的列表应该是中位数一直到数组末尾
            elif find_num < ordered_list[mid_values]:  
            # 如果查找数据小于排序的中位数,向前找数据
                return er_find(find_num, ordered_list[:mid_values - 1])  
                # 查找的列表应该是中位数一直到数组头部
            else:
                return False
        else:
            return False
    else:
        return False

你可能感兴趣的:(数据结构与算法,python语法,算法,数据结构)