算法的实现(王晓东《算法设计与分析》)
<span style="font-size:18px;"> /**
* @MethodName:partition
* @Description: 该方法用于序列的划分
* @param a 用于存储序列的数组
* @param p 序列划分的开始位置
* @param r 序列划分的结束位置
* @return 序列划分的分界点
*/
public static int partition2(int []a, int p, int r){
int x = a[p];//设定基准元素为a[r]
int i = p;//用于记录序列前一部分的第一个元素位置,初始为p
int j = r+1;//用于记录序列后一部分的第一个元素位置,初始为r+1
//循环扫描序列
while(true){
//从左至右开始扫描序列,跳过小于基准元素的元素,直至找到第一个大于等于基准元素的元素
while(a[++i]<x && i<r);
//从右至左开始扫描序列,跳过大于基准元素的元素,直至找到第一个小于等于基准元素的元素
while(a[--j]>x);
//扫描结束,退出循环
if(i>=j) break;
//一旦找到a[i]>=x且a[j]<=x,交换a[j]和a[i]
swap(a, i, j);
}
//交换a[p]和a[j],即将基准元素a[p]交换至前一部分尾部
a[p]=a[j];
a[j]=x;
return j;
}</span>