思路就是利用 偶数指针 和 奇数指针
每次把最后位置的数 按照偶数或者奇数 每次交换到合适的位置
当两个指正有一个跑出去 都保证了 有效的结果
不过我有一个疑问 就是我通过异或来修改两个数时 ac 6/10 表示很不理解

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String[] s = reader.readLine().split(" ");
        int m = Integer.valueOf(s[0]);
        int[] arr = new int[m];
        s = reader.readLine().split(" ");
        for (int i = 0; i < m; i++) {
            arr[i] = Integer.valueOf(s[i]);
        }
        sort1(arr);
        for (int i = 0; i < m; i++)
            System.out.print(arr[i] + " ");


    }

    static public void sort1(int[] arr) {
        int N = arr.length;
        int even = 0;
        int odd = 1;
        int end = arr.length - 1;
        while (even <= end && odd <= end) {
            //偶数
           if((arr[end] & 1)==0){
               swap(arr,end,even);
               even += 2;
           }else{
               swap(arr,end,odd);
               odd += 2;
           } 
        }
    }
    static void swap(int[] arr,int i,int j){
// 为什么这个不能ac????
//         arr[i] = arr[i] ^ arr[j];
//         arr[j] = arr[i] ^ arr[j];
//         arr[i] = arr[i] ^ arr[j];
        int tmp =arr[i];
        arr[i] = arr[j];
        arr[j] = tmp ;
    }
}