一、算法复杂度
平均时间复杂度:O (nlogn)
快速排序最差时间复杂度:O( n^2 )
快速排序最优空间复杂度:O(logn) ;每一次都平分数组的情况
快速排序最差空间复杂度:O( n ) ;退化为冒泡排序的情况
冒泡排序时间复杂度:O(n²)
二、快速排序程序
算法的思想是在指定区间内找到需要排序的元素最左端值(作为key)的适当插入位置,将key两边分治处理
def quicksort1(A):#开辟新的存储空间
if len(A)<=1:
return A
else:
num=A[0]
lessA=[i for i in A[1:]if i<num]
moreA=[i for i in A[1:]if i>=num]
return quicksort1(lessA)+[num]+quicksort1(moreA)
#quicksort2是在原存贮空间上的排序,以key(最左边的数)为界限,左小右大,分成两部分分治
def quicksort2(A,left,right):#left和right是排序的索引区间
if left>=right:#非常重要
return
low=left
high=right
key = A[low]
while left<right:
while left<right and A[right]>key:
right-=1
A[left]=A[right]
while left <right and A[left]<=key:#这个等号不能少,不然程序完蛋
left+=1
A[right]=A[left]
A[right]=key#这里应该是left=right
quicksort2(A,low,left-1)
quicksort2(A,left+1,high)
# print(quicksort1([2,6,3,8,2,2,34,63]))
A=[2,6,3,8,2,2,34,63,9]
quicksort2(A,0,8)
print(A)
三、快速排序运行结果
[2, 2, 2, 3, 6, 8, 9, 34, 63]
参考网址: