【发布时间】:2019-08-21 11:13:34
【问题描述】:
我是 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]);
}
}
【问题讨论】:
-
“它不起作用”是什么意思?请edit你的问题说明你期待什么,为什么期待它,你正在观察什么,以及为什么它是错误的。
-
@Joe C 抱歉,刚刚编辑!
-
将每个
Integer更改为int(Integer.MAX_VALUE除外),它将起作用