Java递归和合并排序

我正在尝试用Java编写一个简单的合并排序程序,我在Eclipse中看到了很多红色。 我还是个初学者,并没有看到什么是错的。 谢谢。

-Kyle

public class merge{ public static int[] mergeSub(int[] array, int left, int right){ if(left<right) { int mid = (left+right)/2; int[] a = mergeSub(array, left, mid); int [] b = mergeSub(array, mid+1, right); return merge(a, b); } int[] arr=new int[1]; arr[0]=arr[left]; return arr; } static int[] merge(int[] left, int[] right){ int index =0; int indexLeft =0; int indexRight=0; int[] result = new int[left.length+right.length]; while(indexLeft<left.length && indexRight<right.length){ if(left[indexLeft] <= right[indexRight]) { result[index]=left[indexLeft]; index++; indexLeft++; } else{ result[index]=right[indexRight]; index++; indexRight++; } } if (indexLeft<left.length){ while(indexLeft<left.length){ result[index]=left[indexLeft]; indexLeft++; index++; } } if (indexRight<right.length){ while(indexRight<left[indexRight]){ result[index]=right[indexRight]; indexRight++; right[indexRight]++; } } return result; } public static void main(String args[]){ int[] array = {2, 4, 5, 7, 5, 6, 3, 5, 7, 8}; System.out.println(mergeSub(array, 0, 9)); }} 

你应该首先在Eclipse中减少它的红色:-)

当您将鼠标hover在错误上时,它会告诉您错误是什么。 例如,在mergeSub代码中,您将left声明为本地数组,即使right都已声明为int参数。 以不同方式命名本地变量。

冲洗并重复。

我的Java有点生疏,但我相信在Java中,一切都必须在课堂上。 您似乎没有在代码示例中声明任何类,但是为了简洁起见,您可能只是将它们遗漏了?

首先…你的主函数mergeSub被声明为静态(很好)但你不能调用非静态函数。 使merge合并为静态,或使mergeSub成为包含类的方法。

复制/粘贴是你的罪恶。 我不想显示整个工作代码,所以:

在mergeSub中:

 arr[0]=arr[left]; should be arr[0]=array[left]; 

在合并中:

 while(indexRight < left[indexRight]) should be while(indexRight < right.length) right[indexRight]++; should be index++; 

也许还有更多。 哦,你不能用println()打印一个数组,你必须遍历它。

我可以看到一个问题(虽然它没有解释编译时错误):

mergeSub()不检查是否传递了一个空数组。 如果你确实传递了一个空数组,你将在arr[0]=array[left];得到一个ArrayIndexOutOfBoundsException arr[0]=array[left]; statemnt

根据给出的反馈,在你摆脱了红色之后,你可以将你的实现与这个@codecodex.com进行比较,看看它如何叠加并学习更多。