快速排序实例化(详细过程)

数组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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章