以下内容为个人学习笔记的整理。
原理:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,使用的是分治的思想,分而治之。
步骤:
- 从序列中挑出一个元素作为“基准(pivot)” ;
- 序列中剩余元素与pivot进行比较,比pivot小的放在pivot的左边,比pivot大的放在pivot的右边,相同元素可放在任意一边;
- 再对pivot左右的子序列递归的进行排序。
示意图:
实现代码(python):
def quick_sort(alist, first, last):
'快速排序'
if first >= last:
return
low = first
high = last
mid_value = alist[first]
while low < high:
while low < high and alist[high] >= mid_value:
high -= 1
alist[low] = alist[high]
while low < high and alist[low] < mid_value:
low += 1
alist[high] = alist[low]
alist[low] = mid_value
quick_sort(alist, first, low-1)
quick_sort(alist, low+1, last)
复杂度分析:
-空间复杂度
排序过程不需要额外的空间,空间复杂度为O(1)
-时间复杂度
–最优时间复杂度:O(nlogn)
–最坏时间复杂度:O(n^2)
–平均时间复杂度:O(nlogn)
是否属于原地排序算法:
快速排序是一种原地排序算法
稳定性:
不稳定