首页 文章

在数组中交换奇数和偶数

提问于
浏览
0

我在这个网站上看到了这段代码 . 它使用一种方法来排序一个数组,其中偶数出现在前面,而奇数出现在数组的后面 . 我想知道你是否可以做同样的事情,除了先让奇数出现然后出现偶数?我试过但无济于事 . 我是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

3 回答

  • 0
    public class Program {
    
        public static void main(String[] args) {
            int a[] = { 2, 3, 5, 6, 7, 8, 10, 46, 50 };
    
            for (int i = 0; i < a.length - 1; i++) {
                for (int j = 0 ; j < a.length-1; j++) {
                    if (a[j] % 2 != 0) {
                        int temp = a[j];
                        a[j] = a[j + 1];
                        a[j + 1] = temp;
                    }
                }
            }
    
            for (int i = 0; i < a.length; i++) {
                System.out.print(a[i] + " ");
            }
        }
    
    }
    
  • 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;
      }
    
  • 0

    试试类似的东西:

    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;
    }
    Output:
    The new sorted array is: 7 13 5 19 24 48 70 10
    

相关问题