一:选择排序,O(n2)
选择排序是一种灵巧的算法,但其速度不是很快
代码示例:
# 选择排序:O(nxn)
# 找出数组中最小的元素
def findsmallest(arr):
# 假设小值为arr[0]
smallest = arr[0]
# 存储最小元素的索引
smallest_index = 0
# O(n)
for i in range(1, len(arr)):
if arr[i] < smallest:
smallest = arr[i]
smallest_index = i
return smallest_index
# 对数组进行选择排序
def selectionSort(arr):
newArr = []
# O(nxn)
for i in range(len(arr)):
smallest_index = findsmallest(arr)
# 将该索引的元素添加到newArr
newArr.append(arr.pop(smallest_index))
return newArr
print(selectionSort([1, 8, 6, 9, 10])) # [1, 6, 8, 9, 10]
二:递归
问题:有个盒子里有盒子,而盒子里的盒子又有盒子。钥匙就在某个盒子中。怎么能找到钥匙。
代码示例:
第一种方法: 详细检查盒子内的东西,如果是盒子继续拆盒子,反之是钥匙
box = [[[[[[9]]]]]]
def look_for_key(box):
# 创建一个盒子堆,收集盒子
boxs = []
# 只要盒子不为空
while box is not None:
# 查看每一个盒子
for i in box:
# 判断是否是盒子
if isinstance(i, list):
# 展开盒子,并丢到盒子堆
boxs.extend(i)
# 丢到空盒子堆
box = i
# 判断是否是钥匙
elif isinstance(i, int):
# pop出钥匙(钥匙只有一把,装在一个盒子里)
box.pop(0) # 是为了结束while的限定条件
print("找到钥匙%s" % i)
look_for_key(box) # 找到钥匙9
第二种方法:递归,函数调用自己
box1 = [[[[[[8]]]]]]
def look_for_key1(box1):
boxs = []
for i in box1:
if isinstance(i, list):
boxs.extend(i)
box1 = i
look_for_key1(box1)
else:
print("找到钥匙%s" % i)
look_for_key1(box1) # 找到钥匙8
来源:CSDN
作者:Asimov__
链接:https://blog.csdn.net/qq_41661056/article/details/104636758