原伪代码:
1 partition(A,p,r)
2 x=A[r]
3 i=p-1
4 for j=p:r-1
5 if A[j]<=x
6 i++
7 exchange A[i].A[j]
8 exchange A[i+1],A[r]
9 return i+1
索引i指向<=主元x的前子数组的最后一个元素
包括《剑指offer》中也是这样实现索引,
其实很不方便,一开始指向了数组前(外部)的元素,第8、9行更是在算法主体结束后继续修改
其实参考C++中“end”的想法,将索引i解释为:
“指向<=主元x的前子数组的最后一个元素” 的下一个元素
伪代码:
1 partition(A,p,r)
2 x=A[r]
3 i=p
4 for j=p:r-1
5 if A[j]<=x
6 exchange A[i].A[j]
7 i++
8 exchange A[i],A[r]
9 return i
另外,判断i==j可以取消元素与自身的交换