【发布时间】:2014-02-27 17:49:20
【问题描述】:
我正在使用一种方法来整理一个数组,其中偶数在前面出现,奇数在数组后面。我的任务要求我使用递归来完成此任务。当我尝试打印排序后的数组时,它只会打印出未排序的数组。我究竟做错了什么?
left 变量从索引 0 开始,right 变量从索引末尾开始。然后将它们进行比较,如果left 是奇数而right 是偶数,则它们交换值。如果left 是偶数,则不会发生交换,它指向数组中的下一个索引。如果right 是奇数,则不会发生交换,它指向数组中的下一个索引。它会这样做,直到所有偶数都在数组的右侧。
我收到了
“线程“main”中的异常 java.lang.StackOverflowError”。
import java.util.*;
public class Problem2{
//i=left
//j=right
//first i tried to shift the whole thing
//have all even numbers pop to the front of array when even
public static int[] callme(int[] arry, int left, int right){
int temp;
if(left>=right) //base case, return array
return arry;
else if(arry[left]%2!=0 && arry[right]%2==0){//if match, do the swap
temp=arry[left];
arry[left]=arry[right];
arry[right]=temp;
return callme(arry, left++, right--);
}
else{
if(arry[right]%2!=0){//if right side is on odd #, then decrease index
return callme(arry, left, right--);
}
if(arry[left]%2==0){//if left side is on even #, then increase index
return callme(arry, left++, right);
}
}
return arry;
}
public static void main(String[] args){
//int index=0;
int[] arry={3,5,6,8};
int[] newarry=callme(arry, 0, arry.length-1);
System.out.print("The new sorted array is: ");
for(int i=0; i<newarry.length;i++){
System.out.print(newarry[i]+" ");
}
}
}
【问题讨论】:
-
偶数是否需要升序排序(奇数也一样)?或者任务只是将所有偶数放在一侧而不关心它们的顺序?或者偶数和奇数部分是否需要按照它们开始的顺序出现?
-
抱歉不清楚。顺序无关紧要。
标签: java arrays sorting recursion