核心:分而治之、递归
1.当数组长度为0或1时,不需要排序,直接返回数组;
2.当数组长度等于2时,需要比较两个元素的大小;
3.当数组长度大于2时,需要找一个基准值,并以其为作基准将数组分成两个数组,并再次递归调用快排
#python
import random
dst_list = [1,5,3,2,43,55,45,23]
def qs(slist):
if len(slist)<2:
return slist
else:
tmpi = random.randint(0,len(slist)-1)
tmpv = slist.pop(tmpi)
less = [i for i in slist if i<tmpv]
great = [j for j in slist if j>tmpv]
return qs(less) +[tmpv]+ qs(great)
print(qs(dst_list))
为什么 tmpi 要随机选一个啊?
s_list(len(s_list)/2) 不可以吗?二分应该是中间腰斩吧?万一 s_list 有 100 万个元素,你 random 选到第一个,第二个不还是很慢吗?
所以以时间复杂度来衡量快排是波动的呀