数组a[] = {8,10,23,48,7,6,11,13,17,19,20,14,5},
1)、设置两个变量i、j,排序开始的时候i=1,j=13;
2)以第一个数组元素作为关键数据,赋值给x,即x=a[1]=8;
3)、从j开始向前搜索,即由后开始向前搜索(j=j-1),找到第一个小于x的值,两者交换;
4)、从i开始向后搜索,即由前开始向后搜索(i=i+1),找到第一个大于x的值,两者交换;
5)、重复第3、4步,直到i=j;
具体过程:
原序列:i=1,j=13,x=a[1]=8;
8,10,23,48,7,6,11,13,17,19,20,14,5
第一轮:x=a[1]=8;
5,10,23,48,7,6,11,13,17,19,20,14,8 当j=13
5,8,23,48,7,6,11,13,17,19,20,14,10 当i=2
第二轮:x=a[1]=8;
5,6,23,48,7,8,11,13,17,19,20,14,10 当j=6
5,6,8,48,7,23,11,13,17,19,20,14,10 当i=3
第三轮:x=a[1]=8;
5,6,7,48,8,23,11,13,17,19,20,14,10 当j=4
5,6,7,8,48,23,11,13,17,19,20,14,10 当i=4
此时i=j,所以大于8的数全部在8的后面,所以小于8的数全部在8的前面。快速排序就是递归调用此过程--再以8为中点分割这个数据序列,分别对前面一部分和后面一部分进行类似的快速排序,从而完成全部数据序列的快速排序,最后把此数据序列变成一个有序的序列。
序列一分为二:5,6,7和48,23,11,13,17,19,20,14,10两个序列
分别对两个序列进行快速排序
序列一:5,6,7
序列二:48,23,11,13,17,19,20,14,10
i=1,j=9,x=a[1]=48再次进行上述排序过程得到:
序列三:10,23,11,13,17,19,20,14,48
此时i=1,j=9,x=a[1]=10;同样得到序列三,此时i=i+1,x=a[2]=23
重复上述操作:10,14,11,13,17,19,20,23,48分为两个序列:
10,14,11,13,17,19,20和48
对序列10,14,11,13,17,19,20进行快速排序x=a[2]=14得到序列:
10,13,11,14,17,19,20,一分为二个序列:10,13,11和17,19,20,继续对序列10,13,11快速排序x=a[2]=13得到10,11,13,排序结束得到:
5,6,7,8,10,11,13,14,17,19,20,23,48