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个数字测试,结果如下,

https://img.mukewang.com/climg/63f8e0cf095d489604040222.jpg

https://img.mukewang.com/climg/63f8e0d6095af9af05000205.jpg

写回答

1回答

liuyubobobo

2023-02-25

不是空间的问题。


因为在第一个代码中,你大量使用 python 内置的函数。而 python 内置的函数底层是调用 c 语言的;


而在第二个代码中,所有的逻辑你都是依靠 python 语言上层实现的,在 python 上层运行逻辑远远慢于调用 python 的内置函数。


请看一下代码,后两个逻辑都是求一个数组中的最小值,其时间花费是第一个逻辑的 2 倍和 3 倍,原因就是第一个逻辑调用 python 的内置函数。二后两个逻辑是否多一步先拿索引再拿值,又会造成一倍的时间差异。


https://img.mukewang.com/climg/63f8f1e509f68a1a12481316.jpg


==========


这就是为什么在这个课程的第一章,我并不建议使用非编译型语言学习算法和数据结构。如果只是学习逻辑,没有问题,但是如果考虑性能,非编译型语言对具体实现的方式非常敏感,甚至可能出现一个本身“更好”的算法,因为实现的原因,比一个“更差”的算法性能差的多。而这种情况在编译型语言中近乎不会出现。


所以编译型语言得到的性能更接近这个算法的真是性能。而不会过多的被你的具体实现细节所影响。


继续加油!:)

2
hq_慕少1574511
hp>好的,知道了,感谢

h023-02-25
共1条回复

算法与数据结构

波波老师5年集大成之作,算法与数据结构系统学习,考试、面试、竞赛通用

2602 学习 · 1084 问题

查看课程