Java 使用MergeSort处理用户输入
我想对输入(来自命令行参数)的一组数字进行排序,在这里呆呆地呆了3天,却没有发现我代码中的错误…真的很绝望 谁能给我一个提示吗Java 使用MergeSort处理用户输入,java,Java,我想对输入(来自命令行参数)的一组数字进行排序,在这里呆呆地呆了3天,却没有发现我代码中的错误…真的很绝望 谁能给我一个提示吗 import java.util.Arrays; public class MergeSorter { public MergeSorter(int[] anArray) { a = anArray; } public void sort() { if (a.length <= 1)
import java.util.Arrays;
public class MergeSorter
{
public MergeSorter(int[] anArray)
{
a = anArray;
}
public void sort()
{
if (a.length <= 1) return;
int[] first = new int[a.length / 2];
int[] second = new int[a.length - first.length];
System.arraycopy(a, 0, first, 0, first.length);
System.arraycopy(a, first.length, second, 0, second.length);
MergeSorter firstSorter = new MergeSorter(first);
MergeSorter secondSorter = new MergeSorter(second);
firstSorter.sort();
secondSorter.sort();
merge(first, second);
}
private void merge(int[] first, int[] second)
{
int iFirst = 0;
int iSecond = 0;
int j = 0;
while (iFirst < first.length && iSecond < second.length)
{
if (first[iFirst] < second[iSecond])
{
a[j] = first[iFirst];
iFirst++;
}
else
{
a[j] = second[iSecond];
iSecond++;
}
j++;
}
System.arraycopy(first, iFirst, a, j, first.length - iFirst);
System.arraycopy(second, iSecond, a, j, second.length - iSecond);
}
private int[] a;
public static void main(String[] args)
{
int[] a = new int[args.length];
for (int i = 0; i < args.length; i++)
{
a[i] = Integer.parseInt(args[i]);
}
MergeSorter sorter = new MergeSorter(a);
sorter.sort();
System.out.println(Arrays.toString(a));
}
}
导入java.util.array;
公共类合并分拣机
{
公共合并分拣机(内部[]阵列)
{
a=混乱;
}
公共无效排序()
{
如果(a.length如果这不是关于Mergesort的练习,您可以简单地使用Arrays.sort(array);
,这是一种Mergesort
对于按降序排序,您可以指定自己的比较器
Arrays.sort(array, new Comparator<Integer>()
{
public int compare(Integer i1, Integer i2)
{
return -i1.compareTo(i2);
}
});
Arrays.sort(数组,新比较器()
{
公共整数比较(整数i1、整数i2)
{
return-i1.compareTo(i2);
}
});
运行测试代码:
Random r = new Random();
int testCase = 0;
out: while (true) {
System.out.println("Test case " + testCase++);
//Create array of random length (from 0 to 999) and random content
int[] a = new int[r.nextInt(1000)];
for (int i = 0; i < a.length; i++)
a[i] = r.nextInt();
//Try to sort (in ascending order)
MergeSorter sorter = new MergeSorter(a);
sorter.sort();
//Test if sorted
for (int i = 0; i < a.length-1; i++) {
if (a[i+1] < a[i]) //not ascending
{
System.out.println("Array is not sorted!");
System.out.println(Arrays.toString(a));
break out;
}
}
}
Random r=new Random();
int testCase=0;
out:while(true){
System.out.println(“测试用例”+testCase++);
//创建随机长度(从0到999)和随机内容的数组
int[]a=新int[r.nextInt(1000)];
for(int i=0;i
找不到您的分类器无法排序的任何案例(我运行了大约1.000.000个测试案例)!它工作正常。
试着写:
java MergeSorter 7 3 5 3 5
它给出:
[3,3,5,5,7]
但如果你写:
java MergeSorter 73535
由于一个int参数,它给出的结果与输入相同:
[73535]
如果这不是关于Mergesort的练习,您可以简单地使用Arrays.sort(array)
,这是一个合并排序。老兄!!!你真的把我从痛苦中拉出来了…上帝保佑,嗯..我刚刚运行了你的代码,它的排序就像它应该的那样?!它运行起来没有任何问题。错误是什么?对Anthales来说…不是真的只是排序不。部分,我不知道为什么…仍然想知道我的代码有什么问题我知道那是一个数字。我n我认为作者可能犯了本例中的错误。@Harvey:当有人通过发布答案帮助您解决问题时,您可以单击答案旁边的勾号接受该答案。这是StackOverflow标记问题已解决。欢迎来到StackOverflow。