输入:序列A[p...r].
存在下标q(p<=q<=r),其中A[p...q]中的元素不超过A[r],而A[q+1...r]中的元素均大于A[r].
设置两个下标i,j初始时分别为p-1和p.让j在[p...r]中扫描,若A[j]<=A[r],则将A[j]与A[i+1]交换,然后i增加1.随着j的增加,A[p...i]和A[i+1...j]也会增长,最终j到达r,将A[i+1]与A[r]交换。
算法伪代码:
1. x<-A[r]
2. i<-p-1
3. for j<-p to r-1
4. do if A[j]<=x
5. then i<-i+1
6. exchange A[i]<->A[j]
7. exchange A[i+1]<->A[r]
8. return i+1
C++:
#include<iostream>
#include<iterator>
#include<vector>
#include<list>
#include<algorithm>
#include<functional>
using namespace std;
int main(){
int