Я довольно новичок в Java и сейчас изучаю алгоритмы сортировки. Я делал свой собственный алгоритм сортировки слиянием, и при этом натолкнулся на странную проблему. Я добавил свой код для моего метода mergeArrays (который должен объединять и сортировать два отсортированных массива) ниже, и проблема в том, что он работает для меньших чисел, например, {9, 13, 89, 199} и {1, 89, 127}, но это не работает для более крупных, например, {9, 13, 89, 5000} и {1, 89, 5001}, так как в итоге он повторяет второе по величине число, т. Е. Выводит {1, 9, 13, 89, 5000, 5000} вместо {1, 9, 13, 89, 5000, 5001}. Я просто не понимаю, почему это так, я очень признателен, если кто-то может помочь!
Спасибо!
import java.util.*;
public class MergeSortExample
{
public Integer[] mergeArrays (Integer[] nums1, Integer[] nums2)
{
Integer[] nums = new Integer[nums1.length + nums2.length];
int nums1First = 0, nums2First = 0;
for (int i = 0; i < nums.length; i++)
{
nums[i] = Math.min (nums1[nums1First], nums2[nums2First]);
if (nums[i] == nums1[nums1First])
{
if (nums1First == nums1.length - 1)
{
nums1[nums1First] = Integer.MAX_VALUE;
}
else
{
nums1First++;
}
}
else if (nums[i] == nums2[nums2First])
{
if (nums2First == nums2.length - 1)
{
nums2[nums2First] = Integer.MAX_VALUE;
}
else
{
nums2First++;
}
}
}
return nums;
}
public static void main (String[] args)
{
/*Integer[] num1 = {9, 13, 89, 5000};
Integer[] num2 = {1, 89, 5001}; does not work*/
Integer[] num1 = {9, 13, 89, 199}; //works
Integer[] num2 = {1, 89, 127}; //works
MergeSortExample m = new MergeSortExample ();
Integer[] testMerge = m.mergeArrays (num1, num2);
for (int i = 0; i < testMerge.length - 1; i++)
{
System.out.print (testMerge[i] + ", ");
}
System.out.println (testMerge[testMerge.length - 1]);
}
}