算法第一步

概述

闲来无聊?
找点有挑战性的代码写?
不想一来就打大BOSS?
来吧,算法第一步,让我们殴打第一波算法小怪兽,增长我们算法之剑的经验值,从此踏入算法修仙之旅。

第一只算法小怪,顺序查找算法

算法介绍

这个算法可以说就是史莱姆了,完全就是经验怪,只要你会点编程语言,就能够搞定它。
我们先看看要殴打这只史莱姆需要干啥?

给你一个数组,这个数组中存储了很多的数据,然后我指定一个数据,让你去从这个数组中查找出来,并返回这个数据在数组中的索引。这个就是顺序查找算法的需求。

首先我们必须要要搞明白,指定的数据,是可能存在,也可能不存在的,这是两种必须要考虑的情况。实际上当你学会分析不同情况的时候,你就已经逐渐形成“分支结构”的算法逻辑思想了。

其次,我们必须要搞明白,这个数组,可能无限的短,也可能无限的长。这个是必须要了解的“边界情况”,这个也是算法的核心基础思想之一,我不知道有没有别人给他取名字,我将其命名为“边界测试”,之前的那种思想我给他取名字叫做“分支测试”,从此以后,我们就掌握了两颗算法宝石了,镶嵌在我们的算法之剑上,能够极大的提高算法之剑的攻击力。

算法实现

我们使用Python来实现顺序查找算法。实际上,此后我的所有算法文章,应该都会优先使用Python来实现算法,因为Python真的太简单了,简直就是实现算法的神器。

以下是顺序查找算法的代码:

def index(arr, target):
    """
    顺序查找算法
    :param arr 要查找的数组
    :param target 要查找的目标值
    """
    # 遍历数组,如果找到了返回索引,找不到返回-1
    for i in range(len(arr)):
        if arr[i] == target:
            return i
    return -1


if __name__ == '__main__':
    # 测试
    test_data = [
        {
            "arr": [1, 2, 3, 4, 5, 6, 7],
            "target": 3,
            "except": 2  # 期望的结果
        }
    ]

    # 进行测试
    for data in test_data:
        result = index(data["arr"], data["target"])
        if result != data["except"]:
            raise Exception(f"错误 ===》 期望:{data['except']},得到:{result}")
    print("测试通过")

这里我们采用了在生产环境中非常有用的表格测试的思想,采用测试表格来对数据进行了测试。
在本段代码中,测试完美通过,因为我们只给出了一个最理想的测试用例。

接下来,我们分别增加测试用例进行测试:

test_data = [
    {
        "arr": [1, 2, 3, 4, 5, 6, 7],
        "target": 3,
        "except": 2  # 期望的结果
    },
    {
        "arr": [],
        "target": 3,
        "except": -1  # 期望的结果
    }
]

增加一个很大的数组:

test_data = [
    {
        "arr": [1, 2, 3, 4, 5, 6, 7],
        "target": 3,
        "except": 2  # 期望的结果
    },
    {
        "arr": [],
        "target": 3,
        "except": -1  # 期望的结果
    },
    {
        "arr": list(range(1000000)),
        "target": 3,
        "except": 3  # 期望的结果
    }
]

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