算法思路
1. 选择一个阈值,将比阈值小的对象放入子序列X中,将比阈值大的对象放入子序列Y中
2. 若子序列X中的对象超过一个,则递归对子序列X排序
3. 若子序列Y中的对象超过一个,则递归对子序列Y排序
4. 连接子序列X,Y得到最终排序后的结果
Python实现
def quick_sort(numbers):
if len(numbers) <= 1:
return numbers
# 左子数组
less = []
# 右子数组
greater = []
# 基准数
base = numbers.pop()
# 对原数组进行划分
for x in numbers:
if x < base:
less.append(x)
else:
greater.append(x)
# 递归调用
return quick_sort(less) + [base] + quick_sort(greater)
待排序的数组
numbers = [54, 31, 88, 87, 92, 87, 10, 39, 59, 22, 25, 59, 11, 28, 66]
排序完成的结果
numbers = [10, 11, 22, 25, 28, 31, 39, 54, 59, 59, 66, 87, 87, 88, 92]
心得
- 最坏情况下的时间复杂度是O(n^2)
- 平均意义下的时间复杂度是O(nlogn)