python 几种排序效率的问题
来源:1-1 我们究竟为什么要学习算法

我是卖报的小画家
2018-04-29
def insertSort(arr, n): for i in range(1,n): for j in range(i, 0, -1): if arr[j] < arr[j-1]: arr[j] , arr[j-1] = arr[j-1], arr[j] else: break return arr def ss(arr, n): for i in range(1, n): for j in range(i-1, -1, -1): if arr[i] < arr[j]: arr[i], arr[j] = arr[j], arr[i] i -= 1 return arr def gaoInsertSort(arr, n): for i in range(1, n): e = arr[i] for j in range(i, 0, -1): if arr[j-1] > e: arr[j] = arr[j-1] arr[j-1] = e else: break return arr
def selectionSort(arr, n): for i in range(n): minIndex = i for j in range(i+1, n): if arr[j] < arr[minIndex]: minIndex = j arr[i], arr[minIndex] = arr[minIndex], arr[i] return arr
<function gaoInsertSort at 0x7f98bd12b320>useing 0.409331083298 s
<function insertSort at 0x7f98bd12b230>useing 3.64669704437 s
<function selectionSort at 0x7f98bd12b1b8>useing 2.55284190178 s
<function ss at 0x7f98bd12b2a8>useing 2.53728699684 s
老师能帮我分析一下ss这个函数为什么比insertSort要快一点呢
1回答
-
可以参考这个问答:https://coding.imooc.com/learn/questiondetail/11257.html
简单来说,对于非编译型语言,语言的解析器对语言的解释过程对整个算法的运行效率影响很大。所以不一定得到理论上的算法运行的效率结果。正因为如此,我个人不是特别建议使用脚本语言做底层算法学习,尤其是如果关注算法的性能的话,通常测试出的算法性能是不够严谨的。当然了,如果只是学习算法的逻辑的话,没有问题。
实际上,不仅仅是脚本语言,就算是编译型语言,最终算法运行的效率,也收编译器不同的影响。不过脚本语言的影响更大。更多类似问题,可以参考:
https://coding.imooc.com/learn/questiondetail/45075.html
https://coding.imooc.com/learn/questiondetail/24162.html
https://coding.imooc.com/learn/questiondetail/5966.html
00
相似问题