像归并排序一样,快速排序也使用分治模式(因此也是用递归)
1.1快排与归并的区别:
快速排序按照原址工作,快速排序渐进运行时间介于最坏情况和平均情况之间。尤其是快排的最坏运行时间是θ(n^2), 但是他的平均情况下的运行时间要更好一些。
快速排序也有好的常数因子(比归并排序要好一点),并且它通常是实践中的一个好的排序算法。
1.2流程:
1.3程序实现:
1 def quickSort(arr): 2 left = [] 3 pivotList = [] 4 right = [] 5 if len(arr) <= 1: 6 return arr 7 else: 8 pivot = arr[0] #将第一个值做为基准 9 for i in arr: 10 if i < pivot: 11 left.append(i) 12 elif i > pivot: 13 right.append(i) 14 else: 15 pivotList.append(i) 16 17 left = quickSort(left) #得到第一轮分组之后,继续将分组进行下去。 18 right = quickSort(right) 19 20 return left + pivotList + right
还有一句话的版本:
qs = lambda xs : ( (len(xs) <= 1 and [xs]) or [ qs( [x for x in xs[1:] if x < xs[0]] ) + [xs[0]] + qs( [x for x in xs[1:] if x >= xs[0]] ) ] )[0]