亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

自上而下的遞歸方法不起作用,不知道如何修復它

自上而下的遞歸方法不起作用,不知道如何修復它

Helenr 2023-12-21 10:49:57
我的“數據結構與算法課”有一個家庭作業問題 - 用 Java 實現自上而下的遞歸合并排序。通過生成 100 個數字的隨機序列,以原始未排序形式打印它們,對它們進行排序,然后按排序順序打印出來,來證明您的排序是有效的。我做了一些編碼,似乎是正確的,但我收到了一個錯誤,并且無法弄清楚我做錯了什么。class RecursiveMergeSort{void TopDownMergeSort(int[] mainArray, int[] copyArray) // mainArray, copyArray, int n{    CopyArray(mainArray, copyArray);    Split(copyArray, 0, 100, mainArray);}private void Split(int[] copyArray, int start, int end, int[] mainArray){    if(end - start < 2)    {        return;    }    int middle = (end + start) / 2;    Split(mainArray, start, middle, copyArray);    Split(mainArray, start, end, copyArray);    CombineArray(copyArray, start, middle, end, mainArray);}private void CombineArray(int[] mainArray, int start, int middle, int end, int[] copyArray){    int s = start; //a    int m = middle; //b    for (int i = start; i < end; i++)    {        if(s < middle && (m >= end || mainArray[s] <= mainArray[m]))        {            copyArray[i] = mainArray[s];            s = s + 1;        }        else        {            copyArray[i] = mainArray [m];                    m = m + 1;        }    }}private void CopyArray(int[] mainArray, int[] copyArray){    System.arraycopy(mainArray, 0, copyArray, 0, 100);}void UnsortedArray(int[] unsortedArray){    for(int i = 0; i < unsortedArray.length; i++)    {        int random = (int)Math.floor(Math.random() * 100) + 1;        unsortedArray[i] = random;        System.out.println("\t" + i + unsortedArray[i]);    }}void SortedArray(int[] unsortedArray){    for(int i = 0; i < unsortedArray.length; i++)    {        System.out.println("\t: " + i + unsortedArray[i]);    }}}
查看完整描述

1 回答

?
ITMISS

TA貢獻1871條經驗 獲得超8個贊

  int middle = (end + start) / 2;

    Split(mainArray, start, middle, copyArray);

    Split(mainArray, start, end, copyArray);

    CombineArray(copyArray, start, middle, end, mainArray);

應該


    int middle = (end + start) / 2;

    Split(mainArray, start, middle, copyArray);

    Split(mainArray, middle, end, copyArray);

    CombineArray(copyArray, start, middle, end, mainArray);

你非常接近,只是第二個遞歸調用的開始索引應該是從中間索引到結束,而不是再次開始一直到結束(導致堆棧溢出錯誤)


附帶說明 - 您應該重命名您的方法以符合標準,例如:它們以小寫字母開頭,例如:


private void combineArray(int[] mainArray, int start, int middle, int end, int[] copyArray)



查看完整回答
反對 回復 2023-12-21
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號