思路就是利用 偶数指针 和 奇数指针
每次把最后位置的数 按照偶数或者奇数 每次交换到合适的位置
当两个指正有一个跑出去 都保证了 有效的结果
不过我有一个疑问 就是我通过异或来修改两个数时 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 ; } }