码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2018-04-08 10:49:34      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:span   情况下   end   pos   quic   实现   程序   png   时间   

像归并排序一样,快速排序也使用分治模式(因此也是用递归)

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]

快速排序

标签:span   情况下   end   pos   quic   实现   程序   png   时间   

原文地址:https://www.cnblogs.com/zenan/p/8743449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!