我的“数据结构与算法课”有一个家庭作业问题 - 用 Java 实现自上而下的递归合并排序。通过生成 100 个数字的随机序列,以原始未排序形式打印它们,对它们进行排序,然后按排序顺序打印出来,来证明您的排序是有效的。
我做了一些编码,似乎是正确的,但我收到了一个错误,并且无法弄清楚我做错了什么。
class RecursiveMergeSort
{
void TopDownMergeSort(int[] mainArray, int[] copyArray) // mainArray, copyArray, int n
{
CopyArray(mainArray, copyArray);
Split(copyArray, 0, 100, mainArray);
}
private void Split(int[] copyArray, int start, int end, int[] mainArray)
{
if(end - start < 2)
{
return;
}
int middle = (end + start) / 2;
Split(mainArray, start, middle, copyArray);
Split(mainArray, start, end, copyArray);
CombineArray(copyArray, start, middle, end, mainArray);
}
private void CombineArray(int[] mainArray, int start, int middle, int end, int[] copyArray)
{
int s = start; //a
int m = middle; //b
for (int i = start; i < end; i++)
{
if(s < middle && (m >= end || mainArray[s] <= mainArray[m]))
{
copyArray[i] = mainArray[s];
s = s + 1;
}
else
{
copyArray[i] = mainArray [m];
m = m + 1;
}
}
}
private void CopyArray(int[] mainArray, int[] copyArray)
{
System.arraycopy(mainArray, 0, copyArray, 0, 100);
}
void UnsortedArray(int[] unsortedArray)
{
for(int i = 0; i < unsortedArray.length; i++)
{
int random = (int)Math.floor(Math.random() * 100) + 1;
unsortedArray[i] = random;
System.out.println("\t" + i + unsortedArray[i]);
}
}
void SortedArray(int[] unsortedArray)
{
for(int i = 0; i < unsortedArray.length; i++)
{
System.out.println("\t: " + i + unsortedArray[i]);
}
}
}
ITMISS
相关分类