C語言的快速排序算法是什麽?
快速排序是對冒泡排序的改進。由C. A. R .霍爾在1962中提出。其基本思想是:通過壹次排序將待排序的數據分成兩個獨立的部分,其中壹部分的所有數據小於另壹部分,然後按照這種方法對這兩部分數據進行快速排序,整個排序過程可以遞歸進行,從而實現整個數據成為壹個有序序列。該算法假設要排序的數組是壹個[0]...[n-1]。首先選擇任意數據(通常是第壹個數據)作為關鍵數據,然後將所有小於它的數字放在它的前面,所有大於它的數字放在它的後面。這個過程被稱為壹遍快速排序。值得註意的是,快速排序並不是壹種穩定的排序算法,即多個相同值的相對位置在算法結束時可能會發生變化。快速排序的算法是:1)設置兩個變量I和J,排序開始時,I=0,J = n-1;2)將第壹個數組元素作為key數據賦給key,即key = a[0];3)從J向前搜索,即從後面向前搜索(J=J-1),找到小於key的第壹個值A[J],與key交換;4)從I開始向後搜索,即從前面向後搜索(I=I+1),找到第壹個大於key的A[I],與key交換;5)重復步驟3、4、5,直到I = j;(3,4當j=j-1,i=i+1時程序中沒有找到步驟,直到找到為止。在查找和交換時,I和J指針的位置保持不變。另外,當i=j時,這個過程必須恰好是i+或j-完成的最後壹個周期的結束。比如要排序的數組A的值是:(初始關鍵數據:X=49)註意,關鍵X永遠不會變,永遠和X比較,不管在哪裏,最終目的都是把X放在中間,小的在前,大的在後。A[0]A[1]A[2]A[3]A[4]A[6]:49 38 65 97 76 13 27第壹次交換後:27 38 65 97 76 13 49(按第壹種算法,x的值,65 >;49,兩者互換,此時:I=3)第三次互換後:27 38 13 97 76 49 65(根據算法第五步,算法第三步將從後面執行,第四次互換後:27 38 13 49 76 97 65(根據算法第四步,將從前面找出大於x的值)49,兩者互換, 此時:I=4,J=6)此時,執行第三步時,發現I=J,從而結束壹次快速排序,所以壹次快速排序後的結果是:27 38 13 49 76 97 65,即所有大於49的數都在49的後面,所有小於49的數都在49的前面。 快速排序就是遞歸調用這個過程——以49為中點劃分這個數據序列,分別對前面部分和後面部分進行類似的快速排序,從而完成所有數據序列的快速排序,最後把這個數據序列變成有序序列。按照這個思路,上述數組A快速排序的整個過程如圖6所示:初始狀態{49 38 65 97 76 13 27}在快速排序{27 38 13} 49 {76 97 65}後,前後兩部分分別快速排序。第三、四步交換後,{76 97 65}變為{65 76 97}。