备赛蓝桥杯,想了下也只是来图体验,重要的是我从这个动力中学到了什么,想尽可能地多了解一些眼前的资源,好决定未来的走向。所以开始阅读一下相关的算法书目,写一下学到的东西激励自己。知道这本书是在做背包问题时始终看不懂题解,偶然看见了这本书的风趣讲法,那时候的恍然大悟和感动,希望能在这本书的阅读中感受到更多。以上
算法图解p28,选择排序
#找数组中最小元素的函数
def findsmallest(n):
sm=n[0]
sm_num=0
for i in range(len(n)):
if n[i]<=n[0]:
sm=n[i]
sm_num=i
return sm_num
def selectsort(n):
newarr=[]
for i in range(len(n)):
sm=findsmallest(n)
newarr.append(n.pop(sm))
return newarr
print (selectsort([5,3,7,9,1]))
总结:
函数必须有返回值的解释:计算机只能看见你给了它公式和一些值,不知道你究竟是要这些原始值还是结果还是函数式,必须return告诉它,要的是这个结果
本公式中findsmallest函数返回的是index而非smallest的值原因是最终是要创建新列表存储源列表pop出的值,而pop()函数中需要的是索引,在不定义的情况下默认index=-1,即从最后一位开始删。假如一开始return的是最小值的值的话,会报错index out of range。
时间复杂度是o(n*n),遍历每个元素所花的是o(n),n个元素遍历n次