闲来无聊?
找点有挑战性的代码写?
不想一来就打大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 # 期望的结果
}
]