我寫了一個方法來合併排序值的數組。方法完美的工作,但我試圖展示已發生的比較和交流的數量。我的第一個想法是創建靜態變量(int比較,int交換)並將它們傳遞給方法。但是遇到從輔助方法返回它們的問題。是否有可能在同一個方法中返回一個int []和兩個整數?如果不是,我如何確定已經發生的比較和交換次數?在合併方法中返回多個變量
這裏是我的歸併和合並方法:
public static int[] mergeSort(int[] A, int comps, int exchs) {
// Array has only 1 element
if(A.length <= 1) {
return A;
}
int midPoint = A.length/2;
// Initialize left and right arrays.
int[] left = new int[midPoint];
int[] right = new int[A.length - midPoint];
System.arraycopy(A, 0, left, 0, midPoint);
System.arraycopy(A, midPoint, right, 0, A.length - midPoint);
//recursively sort left and right arrays
left = mergeSort(left, comps, exchs);
right = mergeSort(right, comps, exchs);
System.out.println("Comparisons" + comps);
System.out.println("Exchanges" + exchs);
return merge(left, right, comps, exchs);
}
private static int[] merge(int[] left, int[] right, int comps, int exchs){
// Initialize the result array.
int[] res = new int[left.length + right.length];
// Initialize the array indexes.
int leftIndex = 0;
int rightIndex = 0;
int resIndex = 0;
// compare each element and merge results
while(leftIndex < left.length && rightIndex < right.length){
if(left[leftIndex] > right[rightIndex]){
res[resIndex] = right[rightIndex];
exchs++;
rightIndex++;
} else {
res[resIndex] = left[leftIndex];
exchs++;
leftIndex++;
}
comps++;
resIndex++;
}
comps++;
// Append remainder of left array into the result array.
while(leftIndex < left.length){
res[resIndex] = left[leftIndex];
exchs++;
leftIndex++;
resIndex++;
}
comps++;
// Append whatever is left from the right array into the result array.
while(rightIndex < right.length) {
res[resIndex] = right[rightIndex];
exchs++;
rightIndex++;
resIndex++;
}
comps++;
return res; // want to return comparisons and exchanges to mergeSort method
}
你可以修改你的變量輸入(交流,水庫),然後諮詢他們...... –