我在下面编写的递归排序方法在使用典型的sout时会打印地址(“ [I @ 7852e922”),我认为这与我在sort()中的返回值有关。我试图使该方法无效,但这似乎也不起作用,原因是我需要删除返回值。但是,当我最终用这个烂摊子替换它时,它会打印出未排序的数组,因此我的方法无效:
System.out.println(Arrays.toString(sort(array2, array2.length-1)));
请对我放松,因为由于对先决条件的培训不足,我在编程/递归中一直处于挣扎状态,并且在编写本文之前10分钟就学会了典型的冒泡排序方式。这是我的整个测试程序:
TL; DR:我的排序方法有什么问题,应该如何打印?
public static void main(String[] args) {
int array2[] = new int[]{1, 3, 5, 2, 4};
System.out.println(Arrays.toString(sort(array2, array2.length-1)));
}
static public int[] sort(int[] array, int n) {
int i = array[n];
int j = i-1;
int temp;
if(n == 0) {
return array;
} else if(i < j) {
temp = i;
i = j;
j = temp;
return sort(array, n - 1);
} else {
return sort(array, n - 1);
}
}
谢谢!
编辑:反馈后,这就是我剩下的。测试工作正常,将我的数组打印排序。我发现当看代码太长时间时,我倾向于将我与x [i]混淆。但是,我仍然在避免使用Arrays.toString()或更改为void sort()方面遇到麻烦。如果需要,我会坚持下去。话虽如此,我感谢任何进一步的帮助。
public static void main(String[] args) {
int array2[] = new int[]{1, 3, 5, 2, 4};
System.out.println(Arrays.toString(sort(array2, array2.length - 1)));
}
static public int[] sort(int[] array, int lastIndex) {
int j = lastIndex - 1;
int temp;
if (lastIndex == 0) {
return array;
} else if (array[lastIndex] < array[j]) {
temp = array[lastIndex];
array[lastIndex] = array[j];
array[j] = temp;
return sort(array, lastIndex - 1);
} else if (array[lastIndex] > array[j]) {
return sort(array, lastIndex - 1);
}
return array;
}
答案 0 :(得分:0)
这是您的答案。我在代码中内嵌了注释。希望对您有所帮助。
private static int[] sort(int[] array, int lastIndex) {
if(lastIndex<1) { //If array has only 1 element to be sorted then return array as is.
return array;
}
//move the largest number in the array to the last index of the array;
for(int i=0;i<array.length-1;i++) {
if(array[i] > array[i+1]) {
//swap
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
// now we know lastIndex element is highest, sort other elements by decrementing lastIndex
return sort(array, lastIndex-1);
}
答案 1 :(得分:0)
您在这里遇到很多问题。首先,比较索引(i和j是索引,它们告诉您成员在数组中的位置)。您可以通过以下比较值来解决此问题:
else if(array[j] < array[i]){
temp = array[i];
array[i] = array[j];
array[j] = temp; }
第二,像这样编写,它将只执行一次冒泡排序的迭代,因此您只能确定最小值会出现在数组的开头(如果您知道冒泡排序的工作原理)。要解决此问题,您必须再添加一层递归调用,但是这次您仅调用n-1个数组元素,因为您确定要对最小值进行排序。
另一种无需更改排序方法即可解决此问题的方法是调用for循环并执行sort方法n次。