Итак, я работал над MergeSort для проекта Algorithm, но столкнулся с различными проблемами, когда речь шла о получении кода для сортировки массивов.Всякий раз, когда я генерирую строку и помещаю ее в MergeSort, кажется, что она получается одинаковой.Мне нужна помощь в поиске, где ошибка в моем коде, почему он дает мне это, и решение с простым, но хорошим объяснением.
Вот что я пробовал в прошлом:
- Я пытался использовать return
arr[0]
вместо arr
, но выдает ошибку из-за невозможности конвертировать из int
в int[]
. - Я посмотрел в своем классе слияния, и там, кажется, все в порядке.
- Я обсуждал эту проблему с моим учителем, и он говорит, что все выглядит хорошо, но я знаю, что где-то что-то не так.
- Я пытался удалить
return merge(arr1, arr2)
, но система выдает ошибку, сообщающую, что я должен что-то вернуть. - Я пытался распечатать массивы по отдельности, но все равно показываетбез изменений и является точно такой же, как и исходная строка.
Метод слияния:
private static int[] merge(int[] a, int[] b)
{
int[] c = new int[a.length + b.length];
int counterA = 0;
int counterB = 0;
int counterC = 0;
while (counterA != a.length && counterB != b.length)
{
if (a[counterA] < b[counterB])
{
c[counterC] = a[counterA];
counterA++;
counterC++;
}
else
{
c[counterC] = b[counterB];
counterB++;
counterC++;
}
}
while (counterB == b.length && counterA != a.length)
{
c[counterC] = a[counterA];
counterA++;
counterC++;
}
while (counterA == a.length && counterB != b.length)
{
c[counterC] = b[counterB];
counterB++;
counterC++;
}
return c;
}
Метод MergeSort:
public static int[] mergeSort(int[] arr)
{
if (arr.length == 1)
{
return arr[0];
}
int[] arr1 = new int[arr.length / 2];
int[] arr2 = new int[arr.length - arr1.length];
for (int i = 0; i < arr1.length; i++)
{
arr1[i] = arr[i];
}
for (int i = 0; i < arr2.length; i++)
{
arr2[i] = arr[i + arr1.length];
}
arr1 = mergeSort(arr1);
arr2 = mergeSort(arr2);
return merge(arr1, arr2);
}
Поскольку массив случайныйсгенерированный, пример будет следующим:
9, 1, 7, 5, 7, 2, 2, 9, 8, 9
ЦельРезультат должен выглядеть следующим образом:
1, 2, 2, 5, 7, 7, 8, 9, 9, 9
Однако, это то, что вместо этого выводится (массив получается без изменений):
9, 1, 7, 5, 7, 2, 2, 9, 8, 9