首先简单描述下快速排序的基本思路

快速排序是基于分治模式处理的,对一个典型子数组A[p...r]排序的分治过程为三个步骤:
1.分解:
A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得
A[p ..q-1] <= A[q] <= A[q+1 ..r]
2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。
3.合并。

快速排序伪代码(来自算法导论)

QUICK_SORT(A,p,r)
if(p<r)
then q <—— PARTITION(A,p,r)
QUICK_SORT(A,p,q-1)
QUICK_SORT(A,q+1,r)

//核心函数,对数组A[p,r]进行就地重排,将小于A[r]的数移到数组前半部分,将大于A[r]的数移到数组后半部分。
PARTITION(A,p,r)
pivot <—— A[r]
i <—— p-1
for j <—— p to r-1
do if A[j] < pivot
i <—— i+1
exchange A[i]<——>A[j]
exchange A[i+1]<——>A[r]
return i+1

 

示例:对以下数组,进行快速排序,下图示出了patition过程。

2   8   7   1   3   5   6   4(主元)

快速排序 - 第1张  | 快课网

 

 

 

 

一个快速排序的实现代码如下