推 alan23273850: mergesort 精華就是可以一直 divid 111.83.155.49 04/05 00:48
→ alan23273850: e,如果還要調用其他 sort 的話那 111.83.155.49 04/05 00:48
→ alan23273850: 幹嘛還要 divide 111.83.155.49 04/05 00:48
→ alan23273850: 你時間當然就是 qs(n/2) + O(n) 111.83.155.49 04/05 00:50
→ alan23273850: 更正,2 * qs(n/2) + O(n) 111.83.155.49 04/05 00:51
推 LPH66: 這裡有個概念叫做遞迴, 你分割後得到了兩個 180.177.0.237 04/05 01:02
→ LPH66: 同樣需要排序但數量變少的陣列 180.177.0.237 04/05 01:02
→ LPH66: 那你就可以遞迴呼叫自己進行排序 180.177.0.237 04/05 01:03
→ LPH66: 數量變少這個條件會保證你能切到剩一個 180.177.0.237 04/05 01:03
→ LPH66: ==== 180.177.0.237 04/05 01:06
→ LPH66: 但是, 如果你的焦點只想擺在合併步驟的話 180.177.0.237 04/05 01:06
→ LPH66: 你已經不是在用合併排序法, 而只是單純地 180.177.0.237 04/05 01:07
→ LPH66: 把兩個已排序的陣列合成一個排序陣列 180.177.0.237 04/05 01:07
→ LPH66: 合併排序法需要這個合併步驟但這不是全部 180.177.0.237 04/05 01:07
感謝兩位大大指導
但我是已經確定把分割做到最後了只剩一個
我只是想說在合併的時候使用While去合併數列 不如直接套用其他Sort來加速
看來這樣想法有錯 感謝感謝
※ 編輯: KAINTS (122.116.222.216 臺灣), 04/05/2021 09:01:17
推 LPH66: 那正好會適得其反; 合併步驟只有線性才能 180.177.0.237 04/05 16:21
→ LPH66: 得到整個演算法是 O(n log n) 180.177.0.237 04/05 16:21
→ LPH66: 如果你的合併步驟是 O(n log n) 180.177.0.237 04/05 16:22
→ LPH66: 則整個演算法會變成 O(n (log n)^2) 180.177.0.237 04/05 16:22
→ LPH66: 反而稍微地變慢了 180.177.0.237 04/05 16:22