python二分法

算法简介之二分法

一、什么是算法

算法的范围很大,只要是解决问题的思路都算算法。但不是所有的算法都是搞笑的,也有很多不合格的算法,可这并不影响算法的流行。因为算法的应用范围确实很广,几乎涵盖了我们生活中的方方面面: 推荐算法(抖音视频推送 淘宝商品推送)、成像算法(AI相关)

常见算法的原理以及为代码

二分法、冒泡、快拍、插入、推排、桶排、数据结构(链表 约瑟夫问题 如何链表是否成环)

算法的条件

输入性,输出性,明确性,有限性,有效性

二、二分法

二分法算是算法中最简单的算法,有很大的缺陷、但是面试的时候喜欢拿来考一考。

二分法有以下限制条件:

1、进行运算的数据值需要有序的。

2、运算的时候如果需要取得数据值是在两头的,反而会更加耗时

二分法的缺陷

针对开头结尾的数据 查找效率很低
"""
数据量太小不适合二分查找,与直接便利相比效率提升并不明显。
但有一个例外,就是数据之间的比较操作非常费时,比如数组中存储的都是组成长度超过100的字符串。
"""

代码

l1 = [12, 21, 32, 43, 56, 76, 87, 98, 123, 321, 453, 565, 678, 754, 812, 987, 1001, 1232]


# 获取中间的索引, 这里通过整除来弄

def find(l1, target_num):
    if len(l1) == 0:
        print('没找到')
        return
        # 获取列表中的中间值// 遇到小数 取整
    middle_index = len(l1) // 2
    # 判断目标数据值与中间索引值的大小
    if target_num > l1[middle_index]: # middle_index 是索引值
        # 切片保留中间值的另一半:
        right_l1 = l1[middle_index+1:]
        print(right_l1)
        # 针对右边一半的列表继续二分进行判断
        return find(right_l1, target_num)
    elif target_num < l1[middle_index]:
        # 切片保留中间值左边的一半:
        left_l1 = l1[:middle_index]
        print(left_l1)
        return find(left_l1, target_num)
    else:
        print('恭喜你找到了')

find(l1, 76)

posted @ 2023-03-06 21:36  性格如此w  阅读(155)  评论(0)    收藏  举报