1. 快排思想
快排也使用了分治的思想,分为三个过程:
1) 分解:数组A[q, ... , r]
被划分为两个子数组A[p, ... , q-1]
和 A[q+1, ..., r]
,使得A[p, ... , q-1]
中的每一个元素都小于等于A[q]
,而A[q]
也小于等于A[q+1, ..., r]
中的每一个元素。
2) 解决:通过递归调用快排,对子数组A[p, ... , q-1]
和 A[q+1, ..., r]
进行排序。
3) 合并:因为是原址排序,并不需要合并操作。
2. 快排实现
快排-伪代码:
FUNCTION QuickSort(A, p, r)
if p < r
q = Partition(A, p, r)
QuickSort(A, p, q-1)
QuickSort(A, q+1, r)
数组划分-伪代码:
FUNCTION Partition(A, p, r)
x= A[r]
i = p-1
for j = p to r-1
if(A[j] < x)
i = i + 1
exchange A[j] with A[i]
exchange A[i + 1] with A[r]
return i + 1
该算法的最坏运行时间为O(n^2), 平均运行时间为O(nlgn)。
通过将比较数据A[r]
改为随机抽样,可使得快排的运行时间更加平均化。