【发布时间】:2013-03-15 19:27:08
【问题描述】:
我一直在研究合并排序递归代码,但遇到了减速带。我在网上浏览了很多次,我的算法本身在纸上,但我似乎无法找出问题所在。
public static int[] mergesort(int[] data, int low, int high)
{
int middle = (high+low)/2;
if (middle==low)
{
int[] data2 = new int [1];
data2[0]=data[middle];
return data2;
}
else
{
int[] firstHalfSorted = mergesort(data, low, middle);
int[] secondHalfSorted = mergesort(data, middle+1, high);
return (merge(firstHalfSorted, secondHalfSorted));
}
}
public static int[] merge(int[] firstHalfSorted, int[] secondHalfSorted)
{
int[] SortedArray = new int[firstHalfSorted.length+secondHalfSorted.length];
int m = 0;
int n = 0;
int count = 0;
while (m<firstHalfSorted.length && n<secondHalfSorted.length)
{
if (firstHalfSorted[m]>secondHalfSorted[n])
{
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
else if (firstHalfSorted[m]<secondHalfSorted[n])
{
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (m!=firstHalfSorted.length)
{
while(m<firstHalfSorted.length){
SortedArray[count]=firstHalfSorted[m];
count++;
m++;
}
}
if (n!=secondHalfSorted.length)
{
while(n<secondHalfSorted.length){
SortedArray[count]=secondHalfSorted[n];
count++;
n++;
}
}
return SortedArray;
}
这里有代码。问题来自一个带有数字的文本输入文件,3,9,7,2,10,5,1,8 按该顺序排列,代码只对其他数字进行排序,分别是 3,7 和 10,1,然后是 3, 7,1,10。
根据我的所有想法,它应该排序 3,9 然后 7,2 依此类推,然后是 3,9,7,2 和 10,5,1,8 依此类推,但事实并非如此!你们能帮帮我吗?
【问题讨论】:
-
您的合并排序方法看起来不同/错误
-
对我能做什么有什么想法吗?
-
请只发布相关代码。在我看来,文件 I/O 没有问题。然后只需在代码中初始化示例数组并从代码示例中删除不相关的文件读/写代码。不相关的代码只是表明您不愿意为解决问题付出任何努力。
-
编辑了与问题无关的代码。对不起!我相信这只是我的合并或合并排序方法的问题
-
main方法对我来说没问题。我只是期待简单的初始化并在那里运行。
标签: java sorting recursion merge