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