我的數(shù)組在合并排序時遇到了一些麻煩。在我遇到的每種情況下,合并都可以正常工作,直到它遇到遞歸方法并將先前合并的數(shù)組發(fā)回。大多數(shù)情況下,它重新排列已經排序的數(shù)組并弄亂了第二個合并方法。例如: (3)(2)(1)(4) -> (2,3)(1,4) -> (1,3,2,4) 將是一個可能的結果。我做錯了什么可能導致這種情況?public static int[] mergeSort(int[] numbers) { if (numbers.length == 1) { return numbers; } int[] leftSide = new int[numbers.length/2]; int[] rightSide = new int[numbers.length-leftSide.length]; System.arraycopy(numbers,0,leftSide,0,leftSide.length); System.arraycopy(numbers,leftSide.length,rightSide,0,rightSide.length); mergeSort(leftSide); mergeSort(rightSide); displayArray(leftSide); displayArray(rightSide); numbers = merge(leftSide,rightSide); System.out.println("============="); return numbers; } public static int[] merge(int[] left, int[] right) { int[] temp = new int[left.length+right.length]; int l = 0; int r = 0; int t = 0; while (l < left.length && r < right.length) { if (left[l] > right[r]) { temp[t] = right[r]; r++; t++; } else { temp[t] = left[l]; l++; t++; } }//while while (l < left.length) { temp[t] = left[l]; l++; t++; } while (r < right.length) { temp[t] = right[r]; r++; t++; } displayArray(temp); return temp; }
1 回答

ibeautiful
TA貢獻1993條經驗 獲得超6個贊
mergeSort 函數(shù)返回一個排序的數(shù)組,我們沒有跟蹤它。由于已排序的數(shù)組(左和右)丟失,合并函數(shù)再次選取未排序的左右數(shù)組。解決方法是更新
mergeSort(leftSide);
mergeSort(rightSide);
到
leftSide = mergeSort(leftSide);
rightSide = mergeSort(rightSide);
這會將它們更新為各自的排序值
添加回答
舉報
0/150
提交
取消