快速排序是对冒泡排序的一种改进。基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。最坏情况的时间复杂度为O(n2),最好情况时间复杂度为O(nlog2n)。
import random
def position(l,beg,end):
# 扫描指针
index = beg
# 换位置
mid=l[end]
for i in range(beg,end):
if l[i] <= mid:
l[index], l[i] = l[i], l[index]
index += 1
l[index], l[end] = l[end], l[index]
return index
# 排序
def mysort(l,beg,end):
if beg<=end:
# 找到拆分元素的下标
p = position(l,beg,end)
# 将列表左半部分排序
mysort(l,beg,p-1)
# 将列表右半部分排序
mysort(l,p+1,end)
if __name__ == '__main__':
l = list(range(10))
random.shuffle(l)
print(l)
mysort(l,0,len(l)-1)
print(l)
时间复杂度
快速排序涉及到递归调用,所以该算法的