我對如何在數組上合併排序有效。 我明白'劃分'步驟,它將輸入數組劃分爲1長度元素。但是,當談到'合併'部分(合併步驟)時,我感到困惑。 例如,給定輸入3 5 1 8 2,除法過程將導致5個元素:3,5,1,8,2。我只理解合併函數將它們合併爲3 5,1 8,2,但它如何繼續合併3 5和1 8? 「組合」部分涉及到遞歸嗎?關於合併排序代碼中的合併步驟的困惑
-3
A
回答
0
當兩個遞歸排序例程返回時,可以安全地假定他們已經排序了它們的部分。合併步驟結合了這兩個排序的子數組。如果輸入是3 5 1 8 2
,則第一次遞歸調用將對前半部分進行排序併產生3 5
,第二次遞歸調用將對後半部分進行排序併產生1 2 8
。現在,合併步驟通過重複選擇兩個子數組中的兩個第一個元素的最小值並將其添加到結果中,將這兩個已排序的半部合併爲一個。
該過程就像感應。
0
這個動畫應該可以幫到你。
http://en.wikipedia.org/wiki/File:Merge-sort-example-300px.gif
的過程是這樣的:
3,5,1,8,2
3 5,1 2 8
- 從n個輸入項目的未排序列表I開始。
- 將I分爲兩部分I1和I2,分別爲天花板(n/2)和地板(n/2)。
- 遞歸排序I1,產生排序列表S1。
- 遞歸排序I2,產生排序列表S2。
- 合併S1和S2成排序的列表S.
在每次迭代中,選擇具有從兩個輸入列表最小鍵的項目,並將其附加到輸出列表。由於兩個輸入列表已排序,因此只有兩個項目可用於 測試,因此每次迭代需要一定的時間。
相關問題
- 1. 異步困惑關於並行功能
- 2. 關於基於回報的可觀察性合併的困惑
- 3. 合併排序代碼C++
- 4. 關於訂單的插入排序代碼困惑
- 5. 對合並排序實施感到困惑
- 6. 分步合併排序
- 7. 合併排序中的合併部分
- 8. SAS左合併SAS合併或數據步驟中的邏輯
- 9. java代碼 - 合併陣列和排序
- 10. 瞭解合併排序代碼
- 11. 合併並在同一步驟中創建合併數據集中的變量
- 12. 排序的列合併不合並列
- 13. 迭代Java合併排序
- 14. 合併排序問題,當刪除陣列複製步驟
- 15. Git合併他們的步驟
- 16. 合併排序
- 17. 關於TensorFlow形狀排名的困惑
- 18. 步驟自動合併失敗後/手動合併
- 19. 排序/合併相關的陣列
- 20. 如何將合併排序轉換爲並行合併排序
- 21. Laravel排序合併集合
- 22. 合併列表和「合併」排序
- 23. C++合併排序不會合並?
- 24. 關於scala中可變和不可變集合的困惑
- 25. 並行合併排序
- 26. 關於冒泡排序VS合併排序
- 27. 關於本地代碼庫(gradle)中的依賴項的困惑
- 28. Python合併排序
- 29. 合併排序java
- 30. 合併排序R
對不起,你指的是什麼代碼? – emecas
您正在尋找的遞歸是在線42上。 –
@ n.m。 :)))))))) – Lrrr