快速排序遞歸演算法
『壹』 快速排序演算法
快速排序(Quicksort)是對冒泡排序的一種改進。
然後,左邊和右邊的數據可以獨立排序。對於左側的數組數據,又可以取一個分界值,將該部分數據分成左右兩部分,同樣在左邊放置較小值,右邊放置較大值。右側的數組數據也可以做類似處理。
重復上述過程,可以看出,這是一個遞歸定義。通過遞歸將左側部分排好序後,再遞歸排好右側部分的順序。當左、右兩個部分各數據排序完成後,整個數組的排序也就完成了。
快速排序演算法通過多次比較和交換來實現排序,其排序流程如下:
(1)首先設定一個分界值,通過該分界值將數組分成左右兩部分。
(2)將大於或等於分界值的數據集中到數組右邊,小於分界值的數據集中到數組的左邊。此時,左邊部分中各元素都小於或等於分界值,而右邊部分中各元素都大於或等於分界值。
『貳』 排序演算法 —— 快速排序
快速排序演算法是一種由東尼·霍爾提出的分治法排序演算法,具有以下特點和性質:
基本思路:
- 選擇一個基準點,將數組分為兩部分,一部分比基準點小,另一部分比基準點大。
- 遞歸地對這兩部分進行排序,通過基準點分割數組達到排序目的。
演算法步驟:
- 選擇基準點:從數組中選取一個元素作為基準值。
- 分區:通過比較將數組分為兩部分,一部分小於基準值,一部分大於基準值。
- 遞歸排序:對這兩部分遞歸地進行快速排序。
時間復雜度:
- 平均情況下:O,因為對n個元素排序時具有線性時間復雜度,而將數組劃分為更小的子數組時具有對數時間復雜度。
- 最壞情況下:O,當輸入數組已經排好序或逆序時,性能最差。可以通過使用隨機版本的快速排序來避免這種情況。
空間復雜度:
- 平均情況下:O,因為使用棧來管理遞歸。
- 最壞情況下:遞歸樹的深度可能為O,但演算法是對輸入向量進行原地排序,所以平均空間復雜度較低。
優化方法:
- 隨機快速排序:隨機選擇基準值元素,減少遇到最壞情況的可能性。
- 三中位數快排:選擇數組中三個元素的中位數作為基準值,旨在提高在處理重復元素較多或排序數組時的性能。
實現與應用:
- 快速排序演算法對基本數據類型和用戶定義數據類型都有完整實現。
- 在實際應用中,快速排序通常表現更快,內部循環可以進一步優化。
綜上所述,快速排序是一種高效的排序演算法,尤其適用於大數據量的排序任務,但在最壞情況下需要關注性能優化。
『叄』 誰能解釋一下用遞歸做的排列演算法的詳細步驟參考王曉東的《計算機演算法設計與分析》p11
用到遞歸的排序演算法有快速排序和歸並排序。
快速排序:先選最開始的元素為樞軸,然後分別從兩頭中的一頭開始與樞軸比較。後面的應該大於樞軸,前面的應該小於樞軸,不然則交換(前面與後面),最後確定下來的位置(前後重合)就是樞軸的位置。這樣一來原序列就一分為二。不斷遞歸,再一分為二,最後直到被分為的兩端中有一個元素單獨的時候就結束分割。
歸並排序:第一次兩個兩個的來,排序之後就歸並成一個有序列,然後再四個四個的來,排序之後歸並成一個有序列……直到最後兩個歸並為一個有序列。