伪代码实现:
QuickSort(A,p,r)
if p < r
q = Partition(A, p, r);
QuickSort(A, p, q-1);
QuickSort(A, q+1, r);
Partition(A, p, r)
x = A[r];
i = p-1;
for j = p to r - 1
if A[j]<=x
i = i+1;
exchange A[i] with A[j];
exchange A[i+1] with A[r];
return i+1;
//其中从1到i是小于x的元素,i+1到r是大于x的元素
一、快速排序的描述
1、说明Partion在数组A=<13,19,9,5,12,8,7,4,21,2,6,11>上操作的过程。
解:其始,p = 1,r = 12,x = 11,i = 0(此时有0个小于11的元素)
第一次循环:j = 1时,A[1] = 13>11;
第二次循环:j = 2时,A[2] = 10>11;
第三次循环:j = 3时,A[3] = 9<11,此时i = 1,并将A[i]和A[j]交换,得到:
A = <9,19,13,5,12,8,7,4,21,2,6,11>
第四次循环:j = 4时,A[4] = 5<11,此时i = 2,并将A[i]和A[j]交换,得到:
A=<9,5,13,19,12,8,7,4,21,2,6,11>
第五次循环:j = 5时,A[5]=12>11;
第六次循环:j = 6时,A[6] = 8<11,此时i = 3,并将A[i]和A[j]交换,得到:
A=<9,5,8,19,12,13,7,4,21,2,6,11>
第七次循环,j = 7时,A[7] = 7<11,此时i = 4,并将A[i]和A[j]交换,得到:
A=<9,5,8,7,12,13,19,4,21,2,6,11>
第八次循环,j = 8时,A[8] = 4<11,此时i = 5,并将A[i]和A[j]交换,得到:
A=<9,5,8,7,4,13,19,12,21,2,6,11>
第九次循环,j = 9时