簡體   English   中英

Java MergeSort在每個遞歸步驟中打印出兩半

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM