- 快速排序: 是一种交换排序方法,采用分治策略。
基本思想:
- 从待排序列中随机选择一个元素作为基准元素;
- 将序列中比基准元素大的放在基准元素的右边,比基准元素小的放在其左边;
- 对基准元素的左右区间分别重复上述第1步和第2步。
复杂度
平均时间 | 最差情况 | 最好情况 | 空间复杂度 | 稳定性 |
---|---|---|---|---|
O(nlogn) | O(n^2) | O(nlogn) | O(logn) | 不稳定 |
备注
- 最好的情况是所选的基准元素刚好平分序列;
- 最差的情况是所选的基准元素将序列分为1个,即左边0个,右边n-1个(或者左边n-1,右边0个),此时可近似看作冒泡排序。
- 空间复杂度不是O(1)的原因是递归造成的。
4. 算法实现(从两头向中间扫描的策略,同时交换与基准逆序的元素,用python)
最初的start=0, end = len(arr)
def quicksort(arr, start, end):
if start < end:
i = start
j = end - 1
x = arr[start] # 选第一个元素作为基准元素
while i<j:
# 从右向左找第一个小于x的数
while i<j and arr[j]>x:
j -= 1
if i<j:
arr[i] = arr[j] #找到后进行交换,并改成从左向右找起
i += 1
# 从左向右找第一个大于x的数
while i<j and arr[i]<x:
i += 1
if i<j:
arr[j] = arr[i] # 找到后交换
j -= 1
arr[i] = x
quicksort(arr, start, i)
quicksort(arr, i+1, end)