返回列表 上一主題 發帖

[發問] 請問堆積排序 遞迴 完全二元樹的範例如何修正

[發問] 請問堆積排序 遞迴 完全二元樹的範例如何修正

本帖最後由 singo1232001 於 2021-7-27 01:21 編輯

小弟目前在學演算法
因為非本科,許多概念要重新學習
先參考了 其他語言的寫法改寫成VBA
正好練習建構概念

但當中遇到一個問題 計算"葉子節點位"時會超過陣列大小
問題在 堆積排序遞迴.Function heapify 裡面的註解位置
只要把這四行
    If c1 > n Or c2 > n Then
    heapify = tree        
    Exit Function           
    End If               
取消掉 就會出錯

原始的範例程式上 並沒有需要另外建置這段,此相關的問題監看後(原始範例設6  第三次 遞迴時,C1算到7)

由於也是剛開始試著寫 Function 沒多久 ,有很多不會寫的地方

若有語法不對 概念錯誤 原則錯誤的部分 煩請高手們指點一下

這份檔案如何修改比較符合原始範本的想法呢? (檔案內有youtube的影片連結可以參考)

堆積排序 堆排序 堆樹 完全二元樹.zip (405.39 KB)

回復 1# singo1232001
自己回復自己問題
找到問題所在
原因在於 此題AB兩者之間有相關性,他會先用A判斷B是否異常,而無法一起同時 if A and B 一起判斷  
步驟改為 if A =true then :if B=true then xxxx
避免B本身異常
   
另外附上檔案參考

堆積排序 堆排序 堆樹 完全二元樹.zip (802.22 KB)

TOP

本帖最後由 singo1232001 於 2021-7-28 10:05 編輯
  1. Function addZ(m, n)
  2. If m = 0 Then Exit Function
  3. If i <= n Then addZ = addZ(m + (-1), n) + n
  4. End Function

  5. Function Mu(m, n)
  6. If n = m Then
  7.     Mu = m
  8. Else
  9.    Mu = addZ(m, Mu(m + 1, n))
  10. End If
  11. End Function
  12. Sub main()
  13. Debug.Print Mu(2, 6)
  14. End Sub
複製代碼
回復 5# n7822123


這道題目真好 有夠刺激

直接突破我的盲腸

我目前是亂寫的 概念上還是有問題

解題 讓我更加熟悉遞迴的玩法

還獲得了許多的思路 感謝感謝

目前我的答案有兩個缺點 1.找不到地方插入迴圈 2.用上了一個負號

研究了三個小時多 堅持不下去了

求大神解答

TOP

回復 7# n7822123


    感謝指導

TOP

        靜思自在 : 不要小看自己,因為人有無限的可能。
返回列表 上一主題