这个快速排序,维护了四段区间,一个是p...i 这一段区间, 它们均小于等于A[r] ,一段是i+1...j-1, 这一段均大于A[r], 还有一段是未分类的元素,范围是j.....r-1,最终是r, A[r]是划分关键字.
0(n)时间可以完成划分,循环结束后,将关键字与第一个大于A[r]的元素互换,这样就满足p...i+1均小于等于A[r],i+2....r均大于A[r].
这种实现方法代码间断,不易出错,而且partition()可以单独用于数组的划分,左边的元素一定是小于等于关键字的,右边的元素一定是大于关键字的, 对于找第K大元素等算法思想是强大支持.