python选择排序用时差异
来源:1-5 选择排序法的复杂度分析
qq_慕少1574511
2023-02-25 00:08:28
老师,
def xuanzhepaixu(data): li=[] for i in range(len(data)): score=min(data) data.remove(score) li.append(score) return l
问下为什么我创建一个空间排序所用时间,比不创空间的要小。
def findmin_index(data): j=0 for i in range(len(data)): if data[i]<=data[j]: j=i return j def xuanzhepaixu2(data): i=0 while(i<=len(data)-1): # print(data) min_index=findmin_index(data[i:])+i data[i],data[min_index]=data[min_index],data[i] i+=1 return data
100000个数字测试,结果如下,
1回答
不是空间的问题。
因为在第一个代码中,你大量使用 python 内置的函数。而 python 内置的函数底层是调用 c 语言的;
而在第二个代码中,所有的逻辑你都是依靠 python 语言上层实现的,在 python 上层运行逻辑远远慢于调用 python 的内置函数。
请看一下代码,后两个逻辑都是求一个数组中的最小值,其时间花费是第一个逻辑的 2 倍和 3 倍,原因就是第一个逻辑调用 python 的内置函数。二后两个逻辑是否多一步先拿索引再拿值,又会造成一倍的时间差异。
==========
这就是为什么在这个课程的第一章,我并不建议使用非编译型语言学习算法和数据结构。如果只是学习逻辑,没有问题,但是如果考虑性能,非编译型语言对具体实现的方式非常敏感,甚至可能出现一个本身“更好”的算法,因为实现的原因,比一个“更差”的算法性能差的多。而这种情况在编译型语言中近乎不会出现。
所以编译型语言得到的性能更接近这个算法的真是性能。而不会过多的被你的具体实现细节所影响。
继续加油!:)
相似问题