我在此站点上看到了此代码。它使用一种方法来对数组进行排序,其中偶数排在数组的前面,而奇数排在数组的后面。我想知道您是否可以做同样的事情,除了先显示奇数,然后再显示偶数?我试过了,但无济于事。我是Java编程的新手,我想测试递归。
public class Recurse { //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[] seperator(int[] arr1, int left, int right){ int temp; if(left>=right) //base case, return array return arr1; else if(arr1[left]%2!=0 && arr1[right]%2==0){//if match, do the swap temp=arr1[left]; arr1[left]=arr1[right]; arr1[right]=temp; return seperator(arr1, left+1, right-1); } else{ if(arr1[right]%2!=0){//if right side is on odd #, then decrease index return seperator(arr1, left, right-1); } if(arr1[left]%2==0){//if left side is on even #, then increase index return seperator(arr1, left+1, right); } } return arr1; } public static void main(String[] args){ //int index=0; int[] arry={70,13,48,19,24,5,7,10}; int[] newarry=seperator(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]+" "); } }
}
输出是这样的:
The new sorted array is: 70 10 48 24 19 5 7 13
好吧,如果你想单号是第一位的,取代任何%2!=0与%2==0任何%2==0带%2!=0:
%2!=0
%2==0
public static int[] seperator(int[] arr1, int left, int right){ int temp; if(left>=right) return arr1; else if(arr1[left]%2==0 && arr1[right]%2!=0){ temp=arr1[left]; arr1[left]=arr1[right]; arr1[right]=temp; return seperator(arr1, left+1, right-1); } else{ if(arr1[right]%2==0){//if right side is on even #, then decrease index return seperator(arr1, left, right-1); } if(arr1[left]%2!=0){//if left side is on odd #, then increase index return seperator(arr1, left+1, right); } } return arr1; }