Печать всего процесса mergeSort

У меня есть спецификация, которая требует от меня создания графического интерфейса с текстовым полем и тремя кнопками. Текстовое поле будет содержать 5 чисел и сохранит их в виде массива, и в зависимости от того, какую кнопку вы щелкнете, они будут отсортированы с помощью bubbleSort, mergeSort или quickSort, отображая каждый сделанный шаг.

Пример для того, что мой вывод bubbleSort будет показывать, что я имею в виду:

5 3 2 6 2 (Пуск)

3 5 2 6 2

[Надрез]

2 2 3 5 6

2 2 3 5 6 (Конец)

Прежде чем я сделаю GUI, который должен быть достаточно простым (цель спецификации - научить сортировке, а не механике GUI), я подумал, что было бы неплохо создать отдельный класс для каждого из них и протестировать их по-своему. сеть, чтобы убедиться, что я понимаю логику. bubbleSort был достаточно прост, и я, кажется, добился прогресса в быстрой сортировке, но мне не удалось заставить mergeSort работать так, как я хочу.

Я попробовал довольно много вещей, включая создание внешнего счетчика, который заставляет следующую строку начинаться, когда напечатано 5 терминов, но все безрезультатно. Единственный другой ресурс, который мне удалось найти по этому вопросу, - это здесь: Как распечатать пошаговый процесс в MergeSort, но у меня возникают проблемы с пониманием того, как мне следует применять принятый ответ, что, кажется, может иметь смысл,

Мой текущий код выглядит следующим образом с закомментированными ошибочными отпечатками. Однако сама логика сортировки работает нормально.

public class MergeSort {

public static void mergeSort(int[] list) {
    if (list.length > 1) {
        int[] firstHalf = new int[list.length / 2];
        System.arraycopy(list, 0, firstHalf, 0, list.length / 2);
        mergeSort(firstHalf);
        int secondHalfLength = list.length - list.length / 2;
        int[] secondHalf = new int[secondHalfLength];
        System.arraycopy(list, list.length / 2, secondHalf, 0,
                secondHalfLength);
        mergeSort(secondHalf);
        merge(firstHalf, secondHalf, list);
        // for (int j = 0; j < list.length; j++) {
        // System.out.print(list[j] + " ");
        // counter++;
        // if (counter == size) {
        // System.out.println();
        // counter = 0;
        // }
        // }
        // System.out.println();
    }
}

public static void merge(int[] list1, int[] list2, int[] temp) {
    int current1 = 0;
    int current2 = 0;
    int current3 = 0;

    while (current1 < list1.length && current2 < list2.length) {
        if (list1[current1] < list2[current2]) {
            temp[current3++] = list1[current1++];
//              for (int j = 0; j < current3; j++) {
//                  System.out.print(temp[j] + " ");
//              }
//              for (int j = 0; j < current1; j++) {
//                  System.out.print(list1[j] + " ");
//              }
            System.out.println();
        } else {
            temp[current3++] = list2[current2++];
        }
    }

    while (current1 < list1.length) {
        temp[current3++] = list1[current1++];
    }

    while (current2 < list2.length) {
        temp[current3++] = list2[current2++];
    }

}

public static void main(String args[]) {
    int[] list = { 5, 3, 2, 6, 2 };
    for (int j = 0; j < list.length; j++) {
        System.out.print(list[j] + " ");
    }
    System.out.println();
    mergeSort(list);
    for (int j = 0; j < list.length; j++) {
        System.out.print(list[j] + " ");
    }
}
}

Любое понимание будет с благодарностью!

1 ответ

Попробуйте что-то вроде этого

public static void mergeSort(int[] list) {
    if (list != null && list.length > 1) {
        System.out.println("mergeSort - ");
        System.out.println(Arrays.toString(list));

        int[] firstHalf = new int[list.length / 2];
        System.arraycopy(list, 0, firstHalf, 0, list.length / 2);
        System.out.println("The first half (before) - ");
        System.out.println(Arrays.toString(firstHalf));
        mergeSort(firstHalf);
        System.out.println("The first half (after) - ");
        System.out.println(Arrays.toString(firstHalf));

        int secondHalfLength = list.length - list.length / 2;
        int[] secondHalf = new int[secondHalfLength];
        System.arraycopy(list, list.length / 2, secondHalf, 0,
                secondHalfLength);

        System.out.println("The second half (before) - ");
        System.out.println(Arrays.toString(secondHalf));
        mergeSort(secondHalf);
        System.out.println("The second half (after) - ");

        System.out.println(Arrays.toString(secondHalf));

        merge(firstHalf, secondHalf, list);
        System.out.println("After - ");
        System.out.println(Arrays.toString(list));
    }
}
Другие вопросы по тегам