我的“數據結構與算法課”有一個家庭作業問題 - 用 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)
添加回答
舉報
0/150
提交
取消