快速排序實例化(詳細過程)

數組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

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