书上快速排序的代码:
HoarePartion(A[l…r])
{
p <- A[l]
i <- l, j <- r+1;
repeat
repeat i <- i+1 until A >= p;
repeat j <- j-1 until A[j] <= p;
swap(A,A[j]);
until i >= j;
swap(A,A[j]);
swap(A[j],A[l]);
return j;
}
Qsort(A[l….r])
{
if l< r
{
s <- Partion(A[l…r]);
Quicksion(A[l .. s-1]);
Quicksion(A[s+1.. r]);
}
}
每次都以第一个值作p为中轴,对数组进行划分。p<- A[l];
i从第一个值开始i<-l,因为后面先i <- i+1;j从最后一个值的后面开始,因为后面先j <- j-1;当i位置的值不小于p时,i停下,当j位置的值不大于p时j停下,交换i,j位置的值。
循环停止条件:i>=j;
停止后再次交换i,j位置的值,因为最后一次交换不是我们期望的。
把j位置的值与第一个值交换。
j的下标就是分裂位置,j前面的值是第一个子数组的结尾,j后面的值是第二个子数组的开头。