Я пишу свой собственный визуализатор для алгоритмов сортировки, и я смог обойти некоторые проблемы, которые у меня были с таймером, с помощью алгоритмов, анализирующих ArrayList массивов int, которые содержат два значения, которые являются индексами, которые должны быть заменены,Это сработало для сортировки "Выбор", "Пузырь" и "Вставка", но мне нужно сделать это для сортировки слиянием и быстрой сортировкой, и я не знаю, как мне это сделать.
Я не очень старалсяпотому что все, что я пробую, вызывает еще одну проблему с тем, как будет работать код.Я знаю, что мне нужно будет использовать рекурсию, и это может повлиять на то, что я пытаюсь проанализировать на дисплее.
void merge(Spectrum colors, int l, int m, int r) {
int[] arr = new int[colors.size()];
for(int i = 0; i < arr.length; i++) {
arr[i] = colors.get(i).getNum();
}
int n1 = m - l + 1;
int n2 = r - m;
int[] L = new int[n1];
int[] R = new int[n2];
for(int i = 0; i < n1; i++) {
L[i] = arr[l + i];
}
for(int j = 0; j < n2; j++) {
R[j] = arr[m + 1 + j];
}
int i = 0;
int j = 0;
int k = l;
while(i < n1 && j < n2) {
if(L[i] <= R[j]) {
arr[k] = L[i];
i++;
}else {
arr[k] = R[j];
j++;
}
k++;
}
while(i < n1) {
arr[k] = L[i];
i++;
k++;
}
while(j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
Это то, что у меня есть для моего метода, который объединит подмассивы.То, что я делал, было то, что каждый раз, когда я переключаю два значения в любом спектре (который расширяет ArrayList из ColorIDs, другой класс, который расширяет цвета и имеет отдельные идентификаторы), я создаю новый массив, который будет содержать два индекса, которые я поменял местамии добавьте его в swapIndexes, который я затем использовал бы для запуска сортировки.
Я не смог получить что-то, что могло бы надежно вернуть ArrayList, который работал бы с рекурсией, поэтому никаких результатов не было получено,Конечным результатом должен быть ArrayList, содержащий массивы размером 2 с каждым свопом по порядку, который будет частью сортировки слиянием.