A. 遞歸,快速排序,D&C
遞歸是一種編程技術,其核心是兩個關鍵要素:基線條件與遞歸條件。基線條件是遞歸的終止點,確保遞歸不會無限進行。遞歸條件則是遞歸函數調用自身,持續執行的過程,直至達到基線條件。遞歸的調用棧,類似程序在執行子函數時的臨時存儲空間,用於記錄當前調用位置,便於函數返回後繼續執行。
棧是一種數據結構,與數組和鏈表相似,遵循後進先出原則,如同貼便簽。在遞歸調用中,棧用於管理函數的執行環境,確保每一步的調用和返回都能正確進行。
分而治之(D&C)是一種解決問題的高效策略,它將復雜問題分解為更小、更簡單的子問題,並遞歸地解決這些子問題,最終將結果合並以得到完整解決方案。這一方法在演算法設計中具有廣泛應用。
以快速排序為例,這是一種基於分而治之的排序演算法。快速排序的關鍵步驟包括識別數組的基準元素,分割數組以將小於基準的元素放在左側,大於或等於基準的元素放在右側,然後對這兩部分遞歸應用相同的過程,直至數組有序。
快速排序的基線條件是數組為空或僅包含一個元素,此時無需排序。通過選擇一個基準元素,數組被分割成兩個子數組。不斷遞歸地在這些子數組中應用相同排序過程,直到所有子數組都滿足基線條件,排序完成。
為了直觀理解快速排序的過程,可以使用可視化工具或繪制圖像,展示數組分割和排序的動態過程。例如,初始數組為[33,10,15,7],基準選擇為33。通過比較和交換,將數組分割為[10,15,7]和[]。接著,對子數組[10,15,7]中的10進行類似處理,最終數組變為有序狀態。
編寫快速排序演算法的代碼時,需要特別注意基準元素的選擇、數組分割邏輯以及遞歸終止條件的實現,以確保演算法的效率和正確性。
B. 為什麼單鏈表不能快速排序
因為o(n^2) ,對單鏈表而言,一些快速的排序演算法,不能用,只能用直接插入等o(n^2) 級的排序演算法來實現排序。因為是有序單鏈表那麼每次插入到鏈表尾結點,那麼每次插入都要從頭掃到尾,然後1+2+3+... m = O(m^2)這樣。