[英]Java MergeSort-printing out the two halves at each recursive step
對於家庭作業,我必須編輯mergeSort方法,以便在每個遞歸步驟中打印出數組的兩半。
我在遞歸步驟(當對每個部分進行排序時)使用toString()方法添加了一條打印語句,但是我做的不正確,它打印的是對象的位置,而不是實際的對象。數組。
不知道該怎么辦。
import java.util.Arrays;
public class MergeSort extends ConsoleProgram
{
/*
* Do not make changes to this method!
*/
public void run()
{
int[] array1 = {9, 8, 7, 6, 5, 4, 3, 2, 1};
int[] array2 = {5, 6, 4, 8, 9, 7, 3, 1, 2};
System.out.print("First array: ");
System.out.println(Arrays.toString(array1));
System.out.print("Second array: ");
System.out.println(Arrays.toString(array2));
System.out.println();
// sort first array
mergeSort(array1);
// sort second array
mergeSort(array2);
System.out.print("First array sorted: ");
System.out.println(Arrays.toString(array1));
System.out.print("Second array sorted: ");
System.out.println(Arrays.toString(array2));
}
/*
* Merge sort takes in an array and sorts it.
*/
public static void mergeSort(int[] arr)
{
if (arr.length <= 1)
{
return;
}
// Split the array in half
int[] firstHalf = new int[arr.length / 2];
int[] secondHalf = new int[arr.length - firstHalf.length];
System.arraycopy(arr, 0, firstHalf, 0, firstHalf.length);
System.arraycopy(arr, firstHalf.length, secondHalf, 0, secondHalf.length);
// Sort each half
mergeSort(firstHalf);
mergeSort(secondHalf);
System.out.println(firstHalf.toString());
System.out.println(secondHalf.toString());
// Merge the halves together
merge(firstHalf, secondHalf, arr);
}
/*
* merge takes in three arrays. The first two are the two halves of an array
* to be merged. The result is the resulting array that consists of the elements
* in the two half arrays, sorted.
*/
private static void merge(int[] firstHalf, int[] secondHalf, int [] result)
{
// set up indices for iteration through arrays
int firstIndex = 0;
int secondIndex = 0;
int resultIndex = 0;
// while there are still elements in both halves, find which is smaller
// and add it to the result array first. Then, add the larger.
while (firstIndex < firstHalf.length && secondIndex < secondHalf.length)
{
if (firstHalf[firstIndex] < secondHalf[secondIndex])
{
result[resultIndex] = firstHalf[firstIndex];
firstIndex++;
}
else
{
result[resultIndex] = secondHalf[secondIndex];
secondIndex++;
}
resultIndex++;
}
// There might be left over elements in one of the halves.
// Copy it over as well.
System.arraycopy(firstHalf, firstIndex, result, resultIndex, firstHalf.length - firstIndex);
System.arraycopy(secondHalf, secondIndex, result, resultIndex, secondHalf.length - secondIndex);
}
}
System.out.println(Arrays.toString(firstHalf));
System.out.println(Arrays.toString(secondHalf));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.