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回答

liuyubobobo

2018-04-29

可以参考这个问答: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


0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11213 学习 · 1617 问题

查看课程